La fonction d'utilisation dans la
fonction anonyme est d'hériter des variables de la portée parent.
L'exemple suivant est l'utilisation la plus courante. Si use n'est pas utilisé, la variable $msg ne sera pas trouvée dans la fonction.
<?php $msg = [1,2,3]; $func = function()use($msg){ print_r($msg); }; $func(); ?>
Array ( [0] => 1 [1] => 2 [2] => 3 )
Le comportement des variables héritéesest dans une fonction Est-elle générée lorsqu'elle est définie ou lorsque la fonction est appelée ? Ajustons l'ordre du code dans l'exemple ci-dessus et plaçons $msg après la définition de la fonction.
<?php $func = function()use($msg){ print_r($msg); }; $msg = [1,2,3]; $func(); ?>
Exécuter la sortie
PHP Notice: Undefined variable: msg in /search/ballqiu/c.php on line 4
On peut voir que le comportement des variables héritées est généré lorsque la fonction est définie. Dans l'exemple ci-dessus,
msg est défini, donc lorsque la fonction est exécutée, $msg est la variable non définie .
<?php $msg = [1,2,3]; $func = function()use(&$msg){ $msg[0]++; print_r($msg); }; $func(); print_r($msg); ?>
Array ( [0] => 2 [1] => 2 [2] => 3 ) Array ( [0] => 2 [1] => 2 [2] => 3 )
<?php $msg = new ArrayObject([1,2,3], ArrayObject::ARRAY_AS_PROPS); $func = function()use($msg){ $msg[0]++; print_r($msg); }; $func(); print_r($msg); ?>
ArrayObject Object ( [storage:ArrayObject:private] => Array ( [0] => 2 [1] => 2 [2] => 3 ) ) ArrayObject Object ( [storage:ArrayObject:private] => Array ( [0] => 2 [1] => 2 [2] => 3 ) )
<?php $func = function()use($msg){ echo $msg[0],"\n"; }; $msg = new ArrayObject([1,2,3], ArrayObject::ARRAY_AS_PROPS); $func(); ?>
$func = function()use(&$msg){ echo $msg[0],"\n"; }; 运行输出1
<?phpclass C{ protected $_num = 0; public function mkFunc(){ $func = function(){ echo $this->_num++, "\n"; }; return $func; } public function get(){ echo $this->_num,"\n"; } }$obj = new C();$func = $obj->mkFunc();$func();$obj->get();?> 运行结果01
actuel , vous pouvez le trouver directement sans utiliser.
Toujours avec l'exemple ci-dessus, quel sera l'effet si vous devez utiliser use ?Changez mkFunc en
public function mkFunc(){ //唯一改动是此处加了use $func = function()use($this){ echo $this->_num++, "\n"; }; return $func; } 运行输出 PHP Fatal error: Cannot use $this as lexical variable
public function mkFunc(){ $self = $this; $func = function()use($self){ echo $this->_num++, "\n"; }; return $func; } 运行结果01
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!