まず、公式に説明されている PHP 匿名関数について学びましょう: https://www.php.net/manual/zh/functions.anonymous.php
php終わりに 公式文書の利点は何ですか?
具体的な問題の説明:
<?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('butter', 1); $my_cart->add('milk', 3); $my_cart->add('eggs', 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); };
このコードと foreach の違いは何ですか?ループ数とサイズは同じにする必要がありますか?
回答:
を使用すると、コードの再利用性が向上し、提供される関数の可能性が高まります。
たとえば、並べ替えはサイズを比較し、位置を交換することに他なりません。位置を交換するロジックは統一されていますが、サイズを比較する場合は多くの状況があるため、位置を交換するためにクロージャ コールバックが提供されます。誰が年上で誰が年下かは、それがどこで使用されるかは自分で決めることができます。
もう 1 つは、いくつかの基本的な方法でコードを読みやすくすることです。
たとえば、他の人が単一の変数に計算しようとしている値を認識できるように、例を array_reduce に変更する方が適切です。ただし、クロージャ関数をパラメータに直接記述するのが最善です。
配列トラバーサルの場合、初期の頃、foreach には多くの問題があり、不適切に使用すると不要なバグが発生する可能性がありました。
例
// 这样用,可能会在后续的逻辑中出现bug foreach ($arr as &$item) { $item['ddd'] = 'ddd'; } // 这样用,就可以避免 array_walk($arr, function (&$item) { $item['ddd'] = 'ddd'; });
とにかく、メリットとデメリットがあり、スピードは当然影響します。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP クロージャを記述する公式の方法の利点について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。