489 Stimmen

Was ist in PHP ein Closure und warum wird der Bezeichner "use" verwendet?

Ich schaue mir gerade einige PHP 5.3.0 Funktionen und stieß auf der Website auf einen Code, der ziemlich lustig aussieht:

public function getTotal($tax)
{
    $total = 0.00;

    $callback =
        /* This line here: */
        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);
}

als eines der Beispiele auf anonyme Funktionen .

Weiß jemand etwas darüber? Gibt es eine Dokumentation? Und sieht es böse aus, sollte es jemals verwendet werden?

3voto

Zhu Jinxuan Punkte 426

Bis vor wenigen Jahren hat PHP sein AST definiert und der PHP-Interpreter hat den Parser vom Auswertungsteil isoliert. In der Zeit, in der die Closure eingeführt wurde, ist der PHP-Parser stark mit der Auswertung gekoppelt.

Als die Closure zum ersten Mal in PHP eingeführt wurde, hatte der Interpreter daher keine Möglichkeit zu wissen, welche Variablen in der Closure verwendet werden, da sie noch nicht geparst wurde. Der Benutzer muss also die Zend-Engine durch expliziten Import erfreuen, indem er die Hausaufgaben macht, die Zend machen sollte.

Dies ist der sogenannte einfache Weg in PHP.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X