Maison  >  Article  >  développement back-end  >  Explication de la différence entre la fermeture PHP obtenant des variables externes et l'exemple de déclaration de mot-clé global variables_php

Explication de la différence entre la fermeture PHP obtenant des variables externes et l'exemple de déclaration de mot-clé global variables_php

韦小宝
韦小宝original
2017-12-05 09:32:401329parcourir

La

Closure est un concept courant, nous pouvons généralement l'utiliser avec la Fonction de rappel pour rendre le code plus concis et lisible. Cet article présente principalement la différence entre PHP Closure pour obtenir des variables externes et le mot-clé global pour déclarer des variables. Jetons un coup d'œil à cet article sur PHP Closure pour obtenir des variables externes Bar. !

Récemment, lorsque j'apprenais Workerman, je suis entré plus fréquemment en contact avec les fonctions de rappel. Lors de l'utilisation, j'utilise souvent ces deux manières différentes d'appeler des variables de travailleur externes en raison des différentes manières d'utiliser les travailleurs. une fermeture PHP récapitulative obtient la différence entre les variables externes et les variables déclarées avec le mot-clé global.

Fermeture

La fermeture est un concept courant, nous pouvons généralement l'utiliser avec des fonctions de rappel pour rendre le code plus concis et facile à lire.

Les fermetures permettent aux fonctions d'utiliser des variables dans la portée parent via la copie. Par exemple :


$global = 'hello';
$bbb = function()use($global){
  echo $global."\n";
};
$bbb();
//输出 'hello'


le mot-clé global déclare des variables

Déclarer des variables via global peut également amener le corps de la fonction à appeler des variables en dehors de la fonction, mais global est différent de use. Le mot-clé global créera une référence avec le même nom que la variable externe et fera référence à la variable externe. variable au sein de la fonction. Les modifications apportées concerneront également les variables externes.


$global = 'hello';
$fun = function(){
  global $global;
  $global =' world';
  echo $global."\n";
};
$fun();
// 输出 'world'


Cela crée simplement une référence avec le même nom et ne change pas la portée de la variable externe d'origine $global, c'est-à-dire qu'on dit que l'appel de cette fonction depuis une autre fonction nécessite toujours de déclarer ou d'utiliser une fermeture


$global = 'hello';
$fun = function(){
  global $global;
  $global =' world';
  echo 'a:'.$global."\n";
};
$ccc = function(){
  echo 'b:'.$global;
};
$fun()
$ccc()
/*


sortie


a: world
Notice: Undefined variable: global in xxxxxxx on line xx
*/


Modifiez légèrement le code, afin qu'il soit plus facile de comparer la différence entre la fermeture et la déclaration globale par mot-clé des variables, qui sont deux moyens d’accéder aux variables externes.


<?php
$global = &#39;hello&#39;;
$fun = function(){
  global $global;
  $global =&#39;world&#39;;
  echo &#39;a:&#39;.$global."\n";
};
$bbb = function()use($global){
  $global = &#39;china&#39;;
  echo &#39;c:&#39;.$global."\n";
};
$fun();
echo &#39;b:&#39;.$global."\n";
$bbb();
echo &#39;d:&#39;.$global;


On peut voir à partir des deux sorties b et d ici que global change la valeur de la variable externe, et la méthode de fermeture Pas vraiment.

Sortie :


a: world
b: world
c:china
d: world


Enfin, je publierai une utilisation plus classique de anonymat dans documents officiels Exemples de fonctions , de fermetures et de fonctions de rappel :


class Cart
{
  const PRICE_BUTTER = 1.00;
  const PRICE_MILK  = 3.00;
  const PRICE_EGGS  = 6.95;
  protected  $products = array();
  public function add($product, $quantity)
  {
    $this->products[$product] = $quantity;
  }
  public function getQuantity($product)
  {
    return isset($this->products[$product]) ? $this->products[$product] :
      FALSE;
  }
  public function getTotal($tax)
  {
    $total = 0.00;
    $callback =
      function ($quantity, $product) use ($tax, &$total)
      {
        $pricePerItem = constant(CLASS . "::PRICE_" .
          strtoupper($product));
        $total += ($pricePerItem * $quantity) * ($tax + 1.0);
      };
    array_walk($this->products, $callback);
    return round($total, 2);
  }
}
$my_cart = new Cart;
$my_cart->add(&#39;butter&#39;, 1);
$my_cart->add(&#39;milk&#39;, 3);
$my_cart->add(&#39;eggs&#39;, 6);
print $my_cart->getTotal(0.05) . "\n";


Résumé

Ce qui précède est l'introduction de l'éditeur à la différence entre les fermetures PHP pour obtenir des variables externes et le mot-clé global pour déclarer des variables. J'espère que cela vous sera utile. Si vous avez des questions, vous. pouvez poser des questions dans la communauté Q&A sur ce site !

Recommandations associées :

Instructions sur l'application pratique des fonctionnalités de fermeture PHP

Que sont les fermetures php ? Explication détaillée des exemples d'utilisation de la fermeture

Étude de la syntaxe de fermeture PHP 1

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!

Déclaration:
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