In Bezug auf anonyme Schließungsfunktionen besteht ein sehr typisches Problem in JS
darin, es an einen this
-Bereich zu binden. Tatsächlich besteht dieses Problem auch in PHP
, wie zum Beispiel dem folgenden Code: JS
中有个很典型的问题就是要给它绑定一个 this
作用域。其实这个问题在PHP
中也是存在的,比如下面这段代码:
$func = function($say){ echo $this->name, ':', $say, PHP_EOL; }; $func('good'); // Fatal error: Uncaught Error: Using $this when not in object context
在这个匿名函数中,我们使用了 $this->name
来获取当前作用域下的 $name
属性,可是,这个 $this
是谁呢?我们并没有定义它,所以这里会直接报错。错误信息是:使用了 $this
但是没有对象上下文,也就是说没有指定 $this 引用的作用域。
1.bindTo() 方法绑定 $this
$func = $func->bindTo($lily, 'Lily'); // $func = $func->bindTo($lily, Lily::class); // $func = $func->bindTo($lily, $lily); $func1('cool');
这回就可以正常输出了。 bindTo()
方法是复制一个当前的闭包对象,然后给它绑定 $this
作用域和类作用域。
$lily 参数是一个 object $newthis
参数,也就是给这个复制出来的匿名函数指定 $this
。
'Lily' 则是绑定一个新的 类作用域 ,它代表一个类型、决定在这个匿名函数中能够调用哪些 私有 和 受保护 的方法
如果不给这个参数,那么我们就不能访问这个 private
的 $name
$func1 = $func->bindTo($lily); $func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name
$this->name
, um den < zu erhalten code>$name-Attribut im aktuellen Bereich, aber wer ist dieser $this
? Wir haben es nicht definiert, daher wird ein Fehler direkt hier gemeldet. Die Fehlermeldung lautet: $this
wird verwendet, aber es gibt keinen Objektkontext, d. h. der Umfang der $this-Referenz ist nicht angegeben. 1.bindTo()-Methode, die $this bindet
$func->call($lily, 'well'); // Lily:well
bindTo()
-Methode kopiert ein aktuelles Abschlussobjekt und bindet es dann an den $this
-Bereich und den Klassenbereich. -Objekt $newthis
-Parameter, d. h. er gibt für diese kopierte anonyme Funktion an $this
. $name
dieses private
zugreifen: 🎜rrreee🎜🎜🎜2.call() Methodenbindung $ This🎜🎜🎜rrreee🎜🎜empfehlenswert :🎜"🎜Zusammenfassung der PHP-Interviewfragen 2021 (Sammlung)🎜" "🎜php-Video-Tutorial🎜"🎜Das obige ist der detaillierte Inhalt vonSo geben Sie dies für anonyme Funktionen in PHP an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!