Maison >développement back-end >tutoriel php >Explication détaillée des fonctions anonymes et des fonctions de fermeture en PHP
Le contenu de cet article est de partager avec vous une explication détaillée des fonctions anonymes et des fonctions de fermeture en php. Il a une certaine valeur de référence. Les amis dans le besoin peuvent se référer à
balises : Fonction anonyme fonction de fermeture fonction de fermeture php fonction anonyme php utilisation de la fonction
Introduction : Anonyme Les fonctions et les fonctions de fermeture ne sont pas des connaissances particulièrement avancées, mais de nombreux amis qui débutent sont toujours confus, car tout le monde est habitué à écrire des fonctions juste pour les appeler. À quoi servent les fonctions anonymes et les fonctions de fermeture ?
L'explication officielle de PHP est la suivante :
Les fonctions anonymes (Fonctions anonymes), également appelées fermetures, permettent la création temporaire d'une fonction sans nom spécifié . La valeur la plus couramment utilisée comme argument de fonction de rappel. Bien entendu, il existe également d’autres applications.
Ce qui est dit ici est très simple, il peut être utilisé comme fonction de rappel. L'exemple suivant est comme une fonction de rappel
<?php echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // 输出 helloWorld ?>
Dans l'exemple ci-dessus. , preg_replace_callback La fonction nécessite trois paramètres. Le premier paramètre est une expression régulière utilisée pour faire correspondre les données, le deuxième paramètre est une fonction et le troisième paramètre est la chaîne qui doit être mise en correspondance. comme ce qui suit
<?php $testFunc = function ($match) { return strtoupper($match[1]); }; echo preg_replace_callback('~-([a-z])~', $testFunc, 'hello-world'); // 输出 helloWorld ?>
Mais nous voyons que nous n'avons besoin d'utiliser cette méthode qu'une seule fois, il n'est donc pas nécessaire de la nommer à nouveau, et il n'est pas nécessaire de l'affecter à une variable (le processus d'attribuer une valeur à une variable : PHP convertira automatiquement cette expression en une instance d'objet de la classe intégrée Closure et l'attribuera à une variable)
Fonctions anonymes en PHP sont également appelées fonctions de fermeture, il n'y a donc aucune différence. Mais le concept de fermeture au sens général n'est pas comme ça. Parlons d'abord de fermeture au sens traditionnel, et proposons un article pour comparer les fermetures en js avec les fermetures (fonctions anonymes) en php.
Apprendre la fermeture Javascript (Closure) - Ruan Yifeng
Il n'y a en fait pas de fonction de fermeture au sens traditionnel en PHP, car les fonctions en PHP ne peuvent pas appeler de variables dans la portée. Comme suit
<?php function a(){ $a = 11; function b(){ $b = 22; echo $a; echo $b; } b(); } a(); //报Notice:Undefined variable: a in index.php on line 6 //22 ?>
D'après l'article ci-dessus, nous savons que c'est possible en js. Par conséquent, les fonctions anonymes en PHP sont également appelées fonctions de fermeture. Vous pouvez également transmettre des variables de la portée parent à la fonction de fermeture (obtenant un effet similaire à celui obtenu par js pour les variables de la portée parent). Le mot-clé use est utilisé en PHP, comme suit
<?php $count = 0; $a = function() { var_dump($count); }; $b = function() use ($count) { var_dump($count); }; $count++; $c = function() use (&$count) { var_dump($count); }; $count++; $a(); // null Notice: Undefined variable: count in $b(); // int 0 $c(); // int 2 $count++; $b(); // int 0 ?>Le résultat de l'exemple ci-dessus est-il différent de ce que vous pensez ?
Analyse : La fonction de fermeture (fonction anonyme) utilise use pour obtenir la variable de domaine d'effet secondaire lorsque la fonction est définie, peu importe le moment où elle est appelée. Si vous souhaitez obtenir la valeur de la variable lors de l'appel, vous devez la transmettre par référence. Comment l'utiliser dépend du scénario d'utilisation.
Liste plusieurs scénarios courantscomme fonction de rappel
//一个我们使用过的例子 <?php/* * 菜谱拆分食物后的拼接 * 参数均不能为空 * */public function mergeFoodsStr($str,array $mapping){ // $str = '白菜半棵、__2__鲍菇两只、__0__一根,__1__两根,三者比例为100:100:15,酱油5克,香油2克,盐1克。';// $mapping = array(// 0 =>array('name' => '胡萝卜','id' => '81' ),// 1 =>array ( 'name' => '萝卜', 'id' => '72'),// 2 =>array ( 'name' => '杏', 'id' => '1841')// ); if(empty($str) || empty($mapping)){ return false; } $strNew = preg_replace_callback('"|__(\d)__|" ',function ($matches) use ($mapping){ return $mapping[$matches[1]]['name']; },$str); $this->log('拼接后的食材字符串',$strNew); return $strNew; }?>
Si c'est une fonction à usage unique qui ne peut pas être réutilisée, vous pouvez utiliser la fonction de fermeture
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!