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

韦小宝
Libérer: 2023-03-17 18:50:02
original
1403 Les gens l'ont consulté

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


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


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()
/*
Copier après la connexion


sortie


a: world
Notice: Undefined variable: global in xxxxxxx on line xx
*/
Copier après la connexion


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


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


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


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!

É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