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

藏色散人
Libérer: 2023-04-10 20:52:02
avant
4061 Les gens l'ont consulté

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);
            };
Copier après la connexion

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;;
});
Copier après la connexion

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!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal