Maison > développement back-end > Problème PHP > Comment spécifier cela pour les fonctions anonymes en PHP

Comment spécifier cela pour les fonctions anonymes en PHP

autoload
Libérer: 2023-03-09 10:34:02
avant
2254 Les gens l'ont consulté

Comment spécifier cela pour les fonctions anonymes en PHP

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
Copier après la connexion

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');
Copier après la connexion

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
Copier après la connexion

2.call() liaison de méthode Set $this

$func->call($lily, 'well'); // Lily:well
Copier après la connexion

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!

Étiquettes associées:
source:imooc.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal