Concernant les fonctions anonymes de fermeture, un problème très typique dans JS
est de le lier à une portée this
. En fait, ce problème existe aussi en PHP
, comme le code suivant :
$func = function($say){ echo $this->name, ':', $say, PHP_EOL; }; $func('good'); // Fatal error: Uncaught Error: Using $this when not in object context
Dans cette fonction anonyme, on utilise $this->name
pour récupérer l'attribut $name
dans le scope courant, mais , qui c'est ça $this
? Nous ne l'avons pas défini, une erreur sera donc signalée directement ici. Le message d'erreur est le suivant : $this
est utilisé mais il n'y a pas de contexte d'objet, c'est-à-dire que la portée de la référence $this n'est pas spécifiée.
Méthode 1.bindTo() liant $this
$func = $func->bindTo($lily, 'Lily'); // $func = $func->bindTo($lily, Lily::class); // $func = $func->bindTo($lily, $lily); $func1('cool');
Cette fois, vous pouvez sortir normalement. La méthode bindTo()
consiste à copier un objet de fermeture actuel, puis à le lier à la portée $this
et à la portée de la classe.
Le paramètre $lily est un paramètre object $newthis
, ce qui signifie spécifier $this
pour cette fonction anonyme copiée.
'Lily' lie une nouvelle portée de classe, qui représente un type et détermine quelles méthodes privées et protégées peuvent être appelées dans cette fonction anonyme
Si ce paramètre n'est pas donné, alors nous ne pouvons pas accéder à l'attribut private
de ce $name
:
$func1 = $func->bindTo($lily); $func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name
2.call() liaison de méthode Set $this
$func->call($lily, 'well'); // Lily:well
Recommandé : 《Résumé des questions d'entretien PHP 2021 (collection)》《Tutoriel vidéo php》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!