Introduction détaillée aux fermetures PHP (avec code)

不言
Libérer: 2023-04-05 19:58:01
avant
2421 Les gens l'ont consulté

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

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

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

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);
    
    // 输出
    吃米:米饭,  吃面:面条
    吃米:甜粥,  吃面:馒头
Copier après la connexion

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);
    // 输出
    吃米:甜粥, 吃面:面条
    吃米:甜粥, 吃面:花卷
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.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