Maison >développement back-end >tutoriel php >Parlons des avantages de la manière officielle d'écrire les fermetures PHP

Parlons des avantages de la manière officielle d'écrire les fermetures PHP

藏色散人
藏色散人avant
2021-12-29 14:54:504055parcourir

Tout d'abord, découvrons les fonctions anonymes PHP officiellement expliquées : https://www.php.net/manual/zh/functions.anonymous.php

Quels sont les avantages de la manière officielle d'écrire les fermetures PHP ?

Description spécifique du problème :

<?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);
            };

Quelle est la différence entre ce code et foreach ? Le nombre et la taille des boucles doivent-ils être les mêmes ?

Réponse :

peut rendre le code plus réutilisable et offrir plus de possibilités pour les fonctions fournies.

Par exemple, le tri n'est rien d'autre que comparer des tailles puis échanger des positions. La logique d'échange de positions est unifiée, mais il existe de nombreuses situations lors de la comparaison de tailles, donc un rappel de fermeture est fourni pour que l'endroit où il est utilisé puisse décider. qui est plus grand et qui est plus petit.

L'autre consiste à rendre le code plus lisible grâce à quelques méthodes de base.

Par exemple, il serait plus approprié de changer votre exemple en array_reduce, afin que lorsque d'autres le regardent, ils puissent probablement réaliser quelle valeur vous essayez de calculer dans une seule variable. Mais il est préférable d’écrire la fonction de fermeture directement dans les paramètres.

Pour la traversée de tableaux, au début, foreach avait de nombreux problèmes, et une mauvaise utilisation créerait des bugs inutiles.

Par exemple

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

Quoi qu'il en soit, il y a des avantages et des inconvénients, la vitesse aura bien sûr un impact.

Apprentissage recommandé : "Tutoriel vidéo PHP"

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer