Heim > Backend-Entwicklung > PHP-Tutorial > Wie rufe ich Objekteigenschaften zugewiesene Abschlüsse in PHP korrekt auf?

Wie rufe ich Objekteigenschaften zugewiesene Abschlüsse in PHP korrekt auf?

DDD
Freigeben: 2024-12-22 11:23:10
Original
375 Leute haben es durchsucht

How to Correctly Invoke Closures Assigned to Object Properties in PHP?

Direktes Aufrufen von Abschlüssen, die Objekteigenschaften zugewiesen sind

Durch das Zuweisen eines Abschlusses zu einer Objekteigenschaft können Entwickler dem Objekt Funktionalität zuordnen. Der direkte Zugriff auf den Abschluss kann jedoch problematisch sein.

Das Problem:

Beim Versuch, einen Abschluss, der einer Objekteigenschaft zugewiesen ist, direkt aufzurufen, tritt der folgende Fehler auf:

Fatal error: Call to undefined method stdClass::callback().
Nach dem Login kopieren

Das liegt daran, dass die Eigenschaft als Abschlussobjekt gespeichert wird, das kein __invoke() hat. Methode.

Lösung in PHP 7 und höher:

Ab PHP 7 ist die folgende Syntax verfügbar:

$obj = new stdClass;
$obj->fn = function($arg) { return "Hello $arg"; };
echo ($obj->fn)('World');
Nach dem Login kopieren

Alternativ: Closure ::call() kann verwendet werden, funktioniert aber nicht damit StdClass:

Closure::call($obj->callback, ['World']);
Nach dem Login kopieren

Lösung vor PHP 7:

Vor PHP 7 kann die magische Methode __call implementiert werden, um Schließungsaufrufe abzufangen:

class Foo
{
    public function __call($method, $args)
    {
        if (is_callable(array($this, $method))) {
            return call_user_func_array($this->$method, $args);
        }
        // else throw exception
    }
}

$foo = new Foo;
$foo->cb = function($who) { return "Hello $who"; };
echo $foo->cb('World');
Nach dem Login kopieren

Hinweis: Die __call-Methode kann nicht verwendet werden call_user_func_array(array($this, $method), $args), da dies zu einer Endlosschleife führen würde.

Das obige ist der detaillierte Inhalt vonWie rufe ich Objekteigenschaften zugewiesene Abschlüsse in PHP korrekt auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage