Explication détaillée des fonctions anonymes et des fermetures en php

怪我咯
Libérer: 2023-03-11 17:30:01
original
1039 Les gens l'ont consulté

1 : Fonctions anonymes (Uniquement disponible en php5.3.0 ou supérieur)

Fonctions anonymes en php, également appelées fonction de fermeture (ferme), permet de spécifier une fonction sans nom. Le plus couramment utilisé est le paramètre valeur de la fonction de rappel

Définition de la fonction anonyme :

$closureFunc = function(){

    ....

 };
Copier après la connexion

ex : Attribuer la fonction anonyme au variable , Appel

 $closureFunc = function($str){

   echo $str;

  };  $closureFunc("hello world!");
Copier après la connexion

via des variables Sortie : bonjour tout le monde !

2 : Fermeture

2.1 Convertir la fonction anonyme Lorsqu'elle est placée dans une fonction ordinaire, la fonction anonyme peut également être renvoyée, ce qui constitue une simple fermeture

function closureFunc1(){
    $func = function(){
        echo "hello";
    };
    $func();
}
closureFunc1();
//输出: hello
Copier après la connexion

2.2 Dans la fonction anonyme, fait référence à les Variables locales

function closureFunc2(){
    $num = 1;
    $func = function(){
        echo $num;
    };
    $func();
}
closureFunc2();
//Notice: Undefined variable: num
Copier après la connexion

Après l'exécution de la fonction ci-dessus, une erreur d'avis sera signalée, indiquant que nous ne pouvons pas utiliser de variables locales dans les fonctions anonymes. À ce stade, nous devons citer un PHP. utilisation du mot-clé, le code est le suivant

function closureFunc2(){
    $num = 1;
    $func = function() use($num){
        echo $num;
    };
    $func();
}
closureFunc2();
//输出: 1
Copier après la connexion

2.3 Renvoyer la fonction anonyme

function closureFunc3(){
    $num = 1;
    $func = function() use($num){
        echo $num;
    };
    return $func;
}
$func = closureFunc3(); //函数返回匿名函数
$func(); //然后我们在用$func() 调用
//输出: 1
Copier après la connexion

2.4 Comment passer les paramètres au fonction anonyme quand on la renvoie ? En fait, cela revient à passer des paramètres à une fonction normale

function closureFunc4(){
    $num = 1;
    $func = function($str) use($num){
        echo $num;
        echo "\n";
        echo $str;
    };
    return $func;
}
$func = closureFunc4();
$func("hello, closure4");
//输出:
//1
//hello, closure4
Copier après la connexion

2.5 Comment utiliser les fermetures pour modifier les valeurs des variables référencées par le contexte ?

function closureFunc5(){
    $num = 1;
    $func = function() use($num) {
        echo "\n";
        $num++;
        echo $num;
    };
    echo "\n";
    echo $num;
    return $func;
}
$func = closureFunc5();
$func();
$func();
$func();
//输出:
// 1
// 2
// 2
// 2
Copier après la connexion

En regardant les résultats d'entrée ci-dessus, il est évident que l'objectif n'a pas été atteint. En fait, ajoutez simplement un symbole de référence &

function closureFunc5(){
    $num = 2;
    $func = function() use(&$num) {
        echo "\n";
        $num++;
        echo $num;
    };
    echo "\n";
    echo $num;
    return $func;
}
$func = closureFunc5();
$func();
$func();
$func();
//输出:
// 2
// 3
// 4
// 5
Copier après la connexion

2.6. Traitez les fonctions anonymes comme des paramètres de passage

function callFunc($func){
    $func("argv");
}

callFunc(function($str){
    echo $str;
})
//输出:
// argv
Copier après la connexion

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:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!