Erläuterung des Unterschieds zwischen dem PHP-Schließen zum Abrufen externer Variablen und dem globalen Schlüsselwort zum Deklarieren von Variablen

jacklove
Freigeben: 2023-04-02 21:06:01
Original
2314 Leute haben es durchsucht

Schließung ist ein gängiges Konzept und wir können es normalerweise mit Rückruffunktionen verwenden, um den Code prägnanter und lesbarer zu machen. In diesem Artikel wird hauptsächlich der Unterschied zwischen dem PHP-Schließen zum Abrufen externer Variablen und dem globalen Schlüsselwort zum Deklarieren von Variablen vorgestellt.

Als ich kürzlich Workerman lernte, kam ich mehr mit Callback-Funktionen in Kontakt Da Worker auf unterschiedliche Weise verwendet werden, werden diese beiden Methoden zum Aufrufen externer Worker-Variablen verwendet. Hier werden wir die Unterschiede zwischen PHP-Verschlüssen zum Abrufen externer Variablen und dem globalen Schlüsselwort zum Deklarieren von Variablen klären.

Schließung

Schließung ist ein gängiges Konzept. Wir können es normalerweise mit Rückruffunktionen verwenden, um den Code prägnanter und einfacher zu lesen.

Abschlüsse ermöglichen es Funktionen, Variablen im übergeordneten Bereich durch Kopieren zu verwenden. Zum Beispiel:

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

globale Schlüsselwortdeklaration von Variablen

Sie können auch Variablen deklarieren durch global Lassen Sie den Funktionskörper eine Variable außerhalb der Funktion aufrufen, aber global unterscheidet sich von der Verwendung Das globale Schlüsselwort erstellt eine Referenz mit demselben Namen wie die externe Variable, und Änderungen an der Variablen innerhalb der Funktion wirken sich auch auf die externe Variable aus .

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

Dadurch wird lediglich eine Referenz mit demselben Namen erstellt und der Gültigkeitsbereich der ursprünglichen externen Variablen $global nicht geändert, was bedeutet, dass sie immer noch in einer anderen Funktion aufgerufen wird muss den Abschluss deklarieren oder verwenden

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

Ausgabe

a: world
Notice: Undefined variable: global in xxxxxxx on line xx
*/
Nach dem Login kopieren

Ändern Sie einen kleinen Code , damit es einfacher ist, die Unterschiede zwischen Abschlüssen und globalen Schlüsselwortdeklarationen von Variablen zu vergleichen, zwei Möglichkeiten, auf externe Variablen zuzugreifen.

<?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;
Nach dem Login kopieren

Aus den beiden Ausgängen b und d ist ersichtlich, dass global den Wert der externen Variablen ändert, die Abschlussmethode jedoch nicht.

Ausgabe:

a: world
b: world
c:china
d: world
Nach dem Login kopieren

Abschließend werde ich ein klassischeres Beispiel für die Verwendung anonymer Funktionen, Abschlüsse und Rückruffunktionen aus den offiziellen Dokumenten veröffentlichen:

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";
Nach dem Login kopieren

Zusammenfassung

Das Obige ist die PHP-Zusammenfassung, die Ihnen der Herausgeber vorgestellt hat Der Unterschied zwischen der Paketerfassung externer Variablen und der mit dem globalen Schlüsselwort deklarierten Variablen wird erläutert. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!

Artikel, die Sie interessieren könnten:

Detaillierte Erläuterung der Verwendung von Anyproxy zur Verbesserung der Effizienz der Sammlung öffentlicher Artikel

Erklärung zum Sammeln von Artikelseiten öffentlicher WeChat-Konten mit PHP

Detaillierte Erklärung zum Sammeln historischer Nachrichtenseiten öffentlicher WeChat-Konten

Das obige ist der detaillierte Inhalt vonErläuterung des Unterschieds zwischen dem PHP-Schließen zum Abrufen externer Variablen und dem globalen Schlüsselwort zum Deklarieren von Variablen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage