Cet article vous apporte une introduction détaillée aux fermetures PHP (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
J'ai lu de nombreuses explications sur les fermetures en PHP. Chaque document veut exprimer à peu près le même sens, mais il est très difficile de le décrire en fonction de ma propre compréhension. veuillez le signaler
Comme nous le savons tous, tout le monde sait que la fermeture de PHP est function () use (){};
Cet article est divisé en 3 étapes :
1. Expliquer l'utilisation des fermetures
1 : Utilisation de l'utilisation dans les fermetures - Partie 1
function () use($param){};
$param = 1; $data = function () use ($param) { var_dump($param); }; $data(); $param = 2; $data(); // 输出结果为 1 1
Résultats de l'analyse : L'utilisation de l'utilisation est équivalente à la utilisation d'objets (utilisation de classe), $data()
signifie instanciation une fois. Cependant, le langage a les caractéristiques de flux de texte la deuxième fois $data()
n'est pas instancié à nouveau. 1, donc le résultat de sortie est le résultat ci-dessus ;
2 : Utilisation de l'utilisation dans les fermetures - Partie 2
$param = 1; $data = function () use ($param) { var_dump($param); }; $data(); $param = 2; $data = function () use ($param) { var_dump($param); }; $data(); // 输出结果为 1 2
Résultats de l'analyse : Sous forme de flux de texte, la variable est à nouveau instanciée, donc la variable stockée est 2, et enfin La sortie est 2 ;
3 : Les parenthèses après la fonction() dans la fermeture, l'utilisation des parenthèses avant utilisation
function ($obj) use($param){};
$param = 1; $data = function ($obj) use ($param) { var_dump($obj); var_dump($param); }; $data(2); $data(3); $param = 2; $data(4); // 输出 2 1 3 1 4 1
Résultats de l'analyse : après la fonction Les parenthèses sont équivalentes à l'utilisation de la fonction. Les mêmes données sont transmises à chaque fois que la fonction est appelée, et elles doivent être transmises. à chaque fois. L'utilisation derrière signifie que l'instance ne changera pas après une fois, donc obj peut changer à tout moment.
2. Instance de clôture
Exemple 1 :
$arr = [ '米' => ['咸粥', '甜粥', '米饭'], '面' => ['面条', '花卷', '馒头'], ]; $param = ''; $bag = function ($data) use ($param) { $l = count($data); return $data[rand(0, $l-1)]; }; $eat_arr = []; foreach ($arr as $key => $value) { $each_arr[] = '吃'.$key.':'.$bag($value); } echo implode(',', $each_arr); // 输出 吃米:米饭, 吃面:面条 吃米:甜粥, 吃面:馒头
Exemple 2 :
$arr = [ '米' => ['咸粥', '甜粥', '米饭'], '面' => ['面条', '花卷', '馒头'], ]; $eat_arr = []; foreach ($arr as $key => $value) { $bag = function () use ($value) { $l = count($value); return $value[rand(0, $l-1)]; }; $each_arr[] = '吃'.$key.':'.$bag(); } echo implode(',', $each_arr); // 输出 吃米:甜粥, 吃面:面条 吃米:甜粥, 吃面:花卷
3. La fermeture est résumée à la fin. La différence avec la fonction est qu'une valeur intermédiaire d'utilisation supplémentaire est ajoutée lors de son utilisation, une chose à noter est que
le () après la fonction est une variable variable, et les variables. in use() sont des instances. Pour les variables qui ne sont pas modifiées après, il n'est pas très utile d'écrire une fermeture dans une boucle, ce qui équivaut à l'instancier à chaque fois. Par conséquent, lors de l'écriture d'une fermeture, vous pouvez d'abord. définir une méthode puis l'appeler. La vraie différence entre les fermetures et les fonctions :
Fonction : encapsule plusieurs appels à la fois.
Fermeture : Utilisé uniquement par cette méthode, le degré de couplage est si faible qu'il peut être ignoré.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!