Heim >Backend-Entwicklung >PHP-Tutorial >Lassen Sie uns über die Vorteile der offiziellen Schreibweise von PHP-Abschlüssen sprechen

Lassen Sie uns über die Vorteile der offiziellen Schreibweise von PHP-Abschlüssen sprechen

藏色散人
藏色散人nach vorne
2021-12-29 14:54:504055Durchsuche

Erstens lernen wir die offiziell erklärten anonymen PHP-Funktionen kennen: https://www.php.net/manual/zh/functions.anonymous.php

Was sind die Vorteile der offiziellen Art, PHP-Abschlüsse zu schreiben?

Spezifische Problembeschreibung:

<?php
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);
// 打出出总价格,其中有 5% 的销售税.
print $my_cart->getTotal(0.05) . "\n";
// 最后结果是 54.29
?>
Copy
        $callback =
            function ($quantity, $product) use ($tax, &$total)
            {
                $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                    strtoupper($product));
                $total += ($pricePerItem * $quantity) * ($tax + 1.0);
            };

Was ist der Unterschied zwischen diesem Code und foreach? Sollten die Anzahl und die Größe der Schleifen gleich sein?

Antwort:

kann den Code wiederverwendbar machen und mehr Möglichkeiten für die bereitgestellten Funktionen bieten.

Sortieren ist beispielsweise nichts anderes als Größenvergleich und anschließender Positionsaustausch. Die Logik des Positionsaustauschs ist einheitlich, es gibt jedoch viele Situationen beim Größenvergleich, sodass ein Abschlussrückruf bereitgestellt wird, damit der Ort, an dem er verwendet wird, entscheiden kann wer ist größer und wer kleiner.

Die andere besteht darin, den Code durch einige grundlegende Methoden lesbarer zu machen.

Zum Beispiel wäre es angemessener, Ihr Beispiel in array_reduce zu ändern, damit andere, wenn sie es betrachten, wahrscheinlich erkennen können, welchen Wert Sie in eine einzelne Variable berechnen möchten. Es ist jedoch am besten, die Abschlussfunktion direkt in die Parameter zu schreiben.

Bei der Array-Durchquerung hatte foreach in den frühen Tagen viele Probleme, und eine unsachgemäße Verwendung führte zu unnötigen Fehlern.

Zum Beispiel

// 这样用,可能会在后续的逻辑中出现bug
foreach ($arr as &$item) {
   $item[&#39;ddd&#39;] = &#39;ddd&#39;;
}
// 这样用,就可以避免
array_walk($arr, function (&$item) {
   $item[&#39;ddd&#39;] = &#39;ddd&#39;;
});

Wie auch immer, es gibt Vor- und Nachteile, Geschwindigkeit wird sich natürlich auswirken.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Vorteile der offiziellen Schreibweise von PHP-Abschlüssen sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen