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

Keine Moderation?

indet man in den Bereichen "PHP Scripte" überwiegend ghiblify (https://ghiblichat.ai/) uralte Scripte die teilweise sogar gefährlich sind und ka ...

Geschrieben von DaviMariya am 19.04.2025 07:55:58
Forum: Fragen/Vorschläge zum Forum
Tutorial: Download

The Arthur Morgan jacket (https://www.newamericanjackets.com/product/arthur-morgan-red-dead-redemption-2-jacket.html) is honestly one of the best ...

Geschrieben von mildreddbrown am 19.04.2025 07:43:19
Forum: Tutorials
Mongo Datenbank und Tabellendaten in sehr großer Menge...Wer kennt sich aus?

That's a lot of data! I've heard that dealing with such large datasets can sometimes feel like herding crazy cattle (https://crazycattle-3d.net). ...

Geschrieben von Sarahli88 am 18.04.2025 07:54:22
Forum: PHP Developer Forum
Hilfe! Datenübertragung

Hallo Zusammen, Ich möchte vorher sagen das ich mit dem Thema null Erfahrung habe bzw. ein Anfänger bin. Ich habe eine Mysql Datenbank erstell ...

Geschrieben von lolliesglum am 18.04.2025 04:17:20
Forum: SQL / Datenbanken