Callback-Funktionen als Objekte erster Klasse

Callback-Funktionen als Objekte erster Klasse wurde mit PHP 8.1.0 eingeführt, um anonyme Funktionen aus Callback-Funktionen zu erstellen. Sie ersetzt die bestehende Callback-Syntax, die Strings und Arrays verwendet. Der Vorteil dieser Syntax ist, dass sie für die statische Analyse zugänglich ist und den Gültigkeitsbereich an der Stelle verwendet, an der die Callback-Funktion aufgerufen wird.

Die CallableExpr(...)-Syntax wird verwendet, um ein Closure-Objekt aus einer Callback-Funktion zu erzeugen. CallableExpr akzeptiert jeden Ausdruck, der in der PHP-Grammatik direkt aufgerufen werden kann:

Beispiel #1 Einfaches Beispiel für eine Callback-Funktion als Objekt erster Klasse

<?php

class Foo {
   public function 
method() {}
   public static function 
staticmethod() {}
   public function 
__invoke() {}
}

$obj = new Foo();
$classStr 'Foo';
$methodStr 'method';
$staticmethodStr 'staticmethod';


$f1 strlen(...);
$f2 $obj(...);  // Callback-Objekt
$f3 $obj->method(...);
$f4 $obj->$methodStr(...);
$f5 Foo::staticmethod(...);
$f6 $classStr::$staticmethodStr(...);

// traditionelle Callback-Funktion mit String, Array
$f7 'strlen'(...);
$f8 = [$obj'method'](...);
$f9 = [Foo::class, 'staticmethod'](...);
?>

Hinweis:

Das ... ist keine Auslassung, sondern Teil der Syntax.

CallableExpr(...) hat die gleiche Semantik wie Closure::fromCallable(). Das heißt, im Gegensatz zu Callback-Funktionen, die Strings und Arrays verwenden, wird bei CallableExpr(...) der Geltungsbereich an dem Punkt berücksichtigt, an dem er erstellt wird:

Beispiel #2 Vergleich des Anwendungsbereichs von CallableExpr(...) und traditionellen Callback-Funktionen

<?php

class Foo {
    public function 
getPrivateMethod() {
        return [
$this'privateMethod'];
    }

    private function 
privateMethod() {
        echo 
__METHOD__"\n";
    }
}

$foo = new Foo;
$privateMethod $foo->getPrivateMethod();
$privateMethod();
// Fatal error: Call to private method Foo::privateMethod() from global scope
// Dies liegt daran, dass der Aufruf außerhalb von Foo erfolgt und die Sichtbarkeit ab diesem Punkt geprüft wird.

class Foo1 {
    public function 
getPrivateMethod() {
        
// Verwendet den Bereich, in dem die Callback-Funktion aufgerufen wird.
        
return $this->privateMethod(...); // identisch mit Closure::fromCallable([$this, 'privateMethod']);
    
}

    private function 
privateMethod() {
        echo 
__METHOD__"\n";
    }
}

$foo1 = new Foo1;
$privateMethod $foo1->getPrivateMethod();
$privateMethod();  // Foo1::privateMethod
?>

Hinweis:

Die Erzeugung von Objekten mit dieser Syntax (z. B. new Foo(...)) wird nicht unterstützt, da die new Foo()-Syntax nicht als Aufruf betrachtet wird.

Hinweis:

Callback-Funktionen als Objekte erster Klasse können nicht mit dem Nullsafe-Operator kombiniert werden. Beides führt zu einem Fehler bei der Kompilierung:

<?php
$obj
?->method(...);
$obj?->prop->method(...);
?>

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Was genau bedeutet "Vibe Coding"? Ein tiefgehender Blick für Entwickler

In der Welt der Softwareentwicklung gibt es unzählige Wege, wie man an ein Projekt herangeht. Manche schwören auf strikte Planung, andere auf bewährte Algorithmen und wieder andere lassen sich von etwas ganz anderem leiten: ihrem Gefühl. ...

admin

Autor : admin
Kategorie: Software & Web-Development

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Einfache Diashow

Habe jetzt die Lösung gefunden. Jetzt auch mit Beschreibung unter dem jeweiligen Bild var aktuell = 0; var bilder=["bild1.jpg","bild2.jpg","b ...

Geschrieben von Mr_Frost am 22.08.2025 10:36:41
Forum: HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
SEO-URLs und MySQL

Eine gute Möglichkeit wäre auch, URL-Rewriting über .htaccess (bei Apache) oder entsprechende Regeln bei Nginx einzusetzen. So lassen sich die ...

Geschrieben von AlvinGonzalez am 22.08.2025 09:52:31
Forum: SQL / Datenbanken
Einfache Diashow

Hallo zusammen, ich versuche zur Zeit, eine einfache Diashow zu erstellen. Im Internet fand ich einen ähnlichen script, den ich für meine Bedü ...

Geschrieben von Mr_Frost am 18.08.2025 20:12:36
Forum: HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS