<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sv">
	<id>https://wiki.linux.se/index.php?action=history&amp;feed=atom&amp;title=F%C3%B6rsta_klassens_kallbara_syntax</id>
	<title>Första klassens kallbara syntax - Versionshistorik</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linux.se/index.php?action=history&amp;feed=atom&amp;title=F%C3%B6rsta_klassens_kallbara_syntax"/>
	<link rel="alternate" type="text/html" href="https://wiki.linux.se/index.php?title=F%C3%B6rsta_klassens_kallbara_syntax&amp;action=history"/>
	<updated>2026-04-28T19:08:55Z</updated>
	<subtitle>Versionshistorik för denna sida på wikin</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.linux.se/index.php?title=F%C3%B6rsta_klassens_kallbara_syntax&amp;diff=3179&amp;oldid=prev</id>
		<title>Admin: Skapade sidan med &#039;== First class callable syntax == Den nya first class callable-syntaxen introducerades i PHP 8.1.0 som ett sätt att skapa anonyma funktioner från callable. Den ersätter den befintliga callable-syntaxen som använder strängar och arrayer. Fördelen med denna syntax är att den är tillgänglig för statisk analys och använder omfånget vid den tidpunkt då callable skapas.  Syntaxen `CallableExpr(...)` används för att skapa ett Closure-objekt från callable. `Calla...&#039;</title>
		<link rel="alternate" type="text/html" href="https://wiki.linux.se/index.php?title=F%C3%B6rsta_klassens_kallbara_syntax&amp;diff=3179&amp;oldid=prev"/>
		<updated>2024-08-18T18:31:16Z</updated>

		<summary type="html">&lt;p&gt;Skapade sidan med &amp;#039;== First class callable syntax == Den nya first class callable-syntaxen introducerades i PHP 8.1.0 som ett sätt att skapa anonyma funktioner från callable. Den ersätter den befintliga callable-syntaxen som använder strängar och arrayer. Fördelen med denna syntax är att den är tillgänglig för statisk analys och använder omfånget vid den tidpunkt då callable skapas.  Syntaxen `CallableExpr(...)` används för att skapa ett Closure-objekt från callable. `Calla...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny sida&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== First class callable syntax ==&lt;br /&gt;
Den nya first class callable-syntaxen introducerades i PHP 8.1.0 som ett sätt att skapa anonyma funktioner från callable. Den ersätter den befintliga callable-syntaxen som använder strängar och arrayer. Fördelen med denna syntax är att den är tillgänglig för statisk analys och använder omfånget vid den tidpunkt då callable skapas.&lt;br /&gt;
&lt;br /&gt;
Syntaxen `CallableExpr(...)` används för att skapa ett Closure-objekt från callable. `CallableExpr` accepterar alla uttryck som kan anropas direkt i PHP-syntaxen:&lt;br /&gt;
&lt;br /&gt;
=== Exempel #1 Enkel first class callable syntax ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Foo {&lt;br /&gt;
   public function method() {}&lt;br /&gt;
   public static function staticmethod() {}&lt;br /&gt;
   public function __invoke() {}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$obj = new Foo();&lt;br /&gt;
$classStr = &amp;#039;Foo&amp;#039;;&lt;br /&gt;
$methodStr = &amp;#039;method&amp;#039;;&lt;br /&gt;
$staticmethodStr = &amp;#039;staticmethod&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$f1 = strlen(...);&lt;br /&gt;
$f2 = $obj(...);  // invokerbart objekt&lt;br /&gt;
$f3 = $obj-&amp;gt;method(...);&lt;br /&gt;
$f4 = $obj-&amp;gt;$methodStr(...);&lt;br /&gt;
$f5 = Foo::staticmethod(...);&lt;br /&gt;
$f6 = $classStr::$staticmethodStr(...);&lt;br /&gt;
&lt;br /&gt;
// traditionell callable som använder sträng, array&lt;br /&gt;
$f7 = &amp;#039;strlen&amp;#039;(...);&lt;br /&gt;
$f8 = [$obj, &amp;#039;method&amp;#039;](...);&lt;br /&gt;
$f9 = [Foo::class, &amp;#039;staticmethod&amp;#039;](...);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Notera:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;...&amp;#039;&amp;#039;&amp;#039; är en del av syntaxen, och inte en utelämning.&lt;br /&gt;
&lt;br /&gt;
`CallableExpr(...)` har samma semantik som `Closure::fromCallable()`. Det vill säga, till skillnad från callable som använder strängar och arrayer, respekterar `CallableExpr(...)` omfånget vid den tidpunkt då det skapas:&lt;br /&gt;
&lt;br /&gt;
=== Exempel #2 Jämförelse av omfång mellan `CallableExpr(...)` och traditionell callable ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Foo {&lt;br /&gt;
    public function getPrivateMethod() {&lt;br /&gt;
        return [$this, &amp;#039;privateMethod&amp;#039;];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private function privateMethod() {&lt;br /&gt;
        echo __METHOD__, &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$foo = new Foo;&lt;br /&gt;
$privateMethod = $foo-&amp;gt;getPrivateMethod();&lt;br /&gt;
$privateMethod();&lt;br /&gt;
// Fatal error: Anrop till privat metod Foo::privateMethod() från globalt omfång&lt;br /&gt;
// Detta beror på att anropet utförs utanför Foo och synligheten kommer att kontrolleras från denna punkt.&lt;br /&gt;
&lt;br /&gt;
class Foo1 {&lt;br /&gt;
    public function getPrivateMethod() {&lt;br /&gt;
        // Använder omfånget där callable skapas.&lt;br /&gt;
        return $this-&amp;gt;privateMethod(...); // identiskt med Closure::fromCallable([$this, &amp;#039;privateMethod&amp;#039;]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private function privateMethod() {&lt;br /&gt;
        echo __METHOD__, &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$foo1 = new Foo1;&lt;br /&gt;
$privateMethod = $foo1-&amp;gt;getPrivateMethod();&lt;br /&gt;
$privateMethod();  // Foo1::privateMethod&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Notera:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Objektskapande med denna syntax (t.ex. `new Foo(...)`) stöds inte, eftersom `new Foo()`-syntaxen inte betraktas som ett anrop.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Notera:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Den first-class callable-syntaxen kan inte kombineras med nullsafe-operatorn. Båda följande exempel resulterar i ett kompileringsfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$obj?-&amp;gt;method(...);&lt;br /&gt;
$obj?-&amp;gt;prop-&amp;gt;method(...);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
= Sidslut =&lt;br /&gt;
Orginalhemsidan på Engelska : &lt;br /&gt;
&amp;lt;BR&amp;gt;[[PHP]]&lt;br /&gt;
&amp;lt;BR&amp;gt;[[Språkreferens]]&lt;br /&gt;
&amp;lt;BR&amp;gt;[[Språkreferens#Funktioner]]&lt;br /&gt;
[[Kategori:Php]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>