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

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

Susan Sarandon
Freigeben: 2024-12-09 17:28:11
Original
932 Leute haben es durchsucht

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

Objekteigenschaften zugewiesene Abschlüsse direkt aufrufen

In PHP unterliegen Objekteigenschaften zugewiesene Abschlüsse Einschränkungen beim Versuch, sie direkt aufzurufen. Wie im bereitgestellten Code gezeigt:

$obj = new stdClass();
$obj->callback = function() {
    print "HelloWorld!";
};
$obj->callback();
Nach dem Login kopieren

Dieser Code schlägt mit der Fehlermeldung „Schwerwiegender Fehler: Aufruf der undefinierten Methode stdClass::callback()“ fehl. Um dieses Problem zu lösen, hat PHP 7 eine direkte Aufrufmethode eingeführt.

PHP 7 und höher

In PHP 7 und höher können Sie Abschlüsse, die Objekteigenschaften zugewiesen sind, direkt mit aufrufen die folgende Syntax:

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

Pre-PHP 7

Vor PHP 7 war es nicht möglich, Objekteigenschaften zugewiesene Abschlüsse direkt aufzurufen. Stattdessen mussten Sie die magische __call-Methode implementieren, um den Anruf abzufangen und den Abschluss aufzurufen:

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: In __call ist es wichtig, den Aufruf von call_user_func_array(array($this) zu vermeiden , $method), $args); da dies eine unendliche Rekursion auslöst.

Das obige ist der detaillierte Inhalt vonWie rufe ich in PHP Objekteigenschaften zugewiesene Abschlüsse direkt 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage