Heim  >  Artikel  >  Backend-Entwicklung  >  Was nützen PHP-Verschlüsse?

Was nützen PHP-Verschlüsse?

青灯夜游
青灯夜游Original
2019-10-10 16:02:243262Durchsuche

Was ist ein PHP-Abschluss? Was ist der Nutzen? Der folgende Artikel stellt Ihnen PHP-Verschlüsse vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Was nützen PHP-Verschlüsse?

Was ist ein PHP-Abschluss?

Die PHP-Abschlussimplementierung basiert hauptsächlich auf anonymen Funktionen

Die anonyme Funktion wird als Zahl in der gewöhnlichen Funktion übergeben und kann auch zurückgegeben werden. Dadurch wird ein einfacher Abschluss erreicht .

Laienhaft ausgedrückt: Untergeordnete Funktionen können lokale Variablen in der übergeordneten Funktion verwenden. Dieses Verhalten wird als Abschluss bezeichnet!

Zwei Haltepunkte des Abschlusses:

1. Als Referenz auf eine Funktionsvariable – wenn die Funktion zurückkehrt, ist sie im aktiven Zustand ?

A Der Abschluss ist ein Stapelbereich, der keine Ressourcen freigibt, wenn eine Funktion zurückkehrt.

Tatsächlich können die beiden oben genannten Punkte zu einem Punkt zusammengefasst werden, dh wenn die Abschlussfunktion zurückkehrt, werden die internen Variablen der Funktion angezeigt aktiviert sind und der Stapelbereich, in dem sich die Funktion befindet, weiterhin erhalten bleibt.

Was nützen PHP-Verschlüsse?

Durch die Implementierung des PHP-Abschlusses können nicht nur die Variablen innerhalb der Funktion gelesen, sondern die Variablen auch immer im Speicher gespeichert werden, sodass die Variablen auch nach Ausführung der Funktion immer vorhanden sind.

Mehrere Funktionen des Abschlusses:

1. Reduzieren Sie den foreach-Schleifencode

Zum Beispiel manuell Das Beispiel in http://php.net/manual/en/functions.anonymous.php ist Cart

<?php
// 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。
// 其中有一个方法用来计算购物车中所有商品的总价格。该方法使用了一个closure作为回调函数。
class Cart
{
    constPRICE_BUTTER  = 1.00;
    constPRICE_MILK    = 3.00;
    constPRICE_EGGS    = 6.95;
 
    protected  $products = array();
     
    publicfunction add($product,$quantity)
    {
        $this->products[$product] =$quantity;
    }
     
    publicfunction getQuantity($product)
    {
        returnisset($this->products[$product]) ?$this->products[$product] :
               FALSE;
    }
     
    publicfunction 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);
        returnround($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);
 
// 打出出总价格,其中有 5% 的销售税.
print $my_cart->getTotal(0.05) . "\n";
// The result is 54.29
?>

Wenn wir die getTotal-Funktion transformieren, müssen wir foreach

2 verwenden Funktionsparameter

function html ($code , $id="",$class=""){
 
if ($id !== "") $id= " id = \"$id\"" ;
 
$class = ($class !== "")? " class =\"$class\"":">";
 
$open = "<$code$id$class";
 
$close = "</$code>";
 
return function ($inner= "")use ($open,$close){
 
return "$open$inner$close";};
 
}

Wenn wir die übliche Methode verwenden, werden wir innere in die HTML-Funktionsparameter einfügen, sodass es besser ist, Abschlüsse zu verwenden, egal ob es liest oder den Code verwendet

3. Geben Sie die rekursive Funktion frei

<?php
    $fib= function($n)use(&$fib) {
        if($n== 0 || $n == 1) return 1;
        return$fib($n- 1) + $fib($n- 2);
    };
 
   echo$fib(2) . "\n";// 2
   $lie= $fib;
   $fib= function(){die(&#39;error&#39;);};//rewrite $fib variable
   echo$lie(5); // error   because $fib is referenced by closure

Beachten Sie, dass die Verwendung von & hier nicht gefunden wird (fib). nicht zuvor definiert) Typ)

Wenn Sie also einen Abschluss verwenden möchten, um eine Schleifenfunktion abzubrechen, müssen Sie die Form

<?php
$recursive= function () use (&$recursive){
// The function is now available as $recursive
}

4 verwenden. Informationen zur verzögerten Bindung

Wenn Sie die Bindung der verwendeten Variablen verzögern müssen, müssen Sie Referenzen verwenden. Andernfalls wird eine Kopie erstellt und beim Definieren verwendet

<?php
$result = 0;
 
$one = function()
{ var_dump($result); };
 
$two = function() use ($result)
{ var_dump($result); };
 
$three = function() use (&$result)
{ var_dump($result); };
 
$result++;
 
$one();   // outputs NULL: $result is not in scope
$two();   // outputs int(0): $result was copied
$three();   // outputs int(1)

Verwendung von Referenzen und sie nicht zu verwenden. Die Referenz stellt dar, ob der Wert beim Aufruf oder bei der Deklaration der Funktion zugewiesen wird

Weitere PHP-bezogene Kenntnisse finden Sie auf der PHP-Chinese-Website !

Das obige ist der detaillierte Inhalt vonWas nützen PHP-Verschlüsse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Was bedeutet PHP-Funktion?Nächster Artikel:Was bedeutet PHP-Funktion?