Pertama, mari kita pelajari tentang fungsi anonymous PHP yang dijelaskan secara rasmi: https://www.php.net/manual/zh/functions.anonymous.php
php penutupan Apakah faedah penulisan rasmi?
Perihalan masalah terperinci:
<?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); };
Apakah perbezaan antara kod ini dan foreach? Sekiranya bilangan gelung dan skala adalah sama?
Jawapan:
boleh menjadikan kod lebih boleh digunakan semula dan memberikan lebih banyak kemungkinan untuk fungsi yang disediakan.
Sebagai contoh, pengisihan tidak lebih daripada membandingkan saiz dan kemudian bertukar kedudukan Logik pertukaran kedudukan adalah bersatu, tetapi terdapat banyak situasi apabila membandingkan saiz, jadi panggilan balik penutupan disediakan supaya tempat di mana ia. digunakan boleh menentukan sendiri Siapa yang lebih tua dan siapa yang lebih muda.
Yang lain adalah untuk menjadikan kod lebih mudah dibaca melalui beberapa kaedah asas.
Sebagai contoh, adalah lebih sesuai untuk menukar contoh anda kepada array_reduce, supaya apabila orang lain melihatnya, mereka mungkin dapat menyedari nilai yang anda cuba kira ke dalam pembolehubah tunggal. Tetapi yang terbaik adalah menulis fungsi penutupan terus dalam parameter.
Untuk traversal tatasusunan, pada awalnya, foreach mempunyai banyak masalah, dan penggunaan yang tidak betul akan menghasilkan pepijat yang tidak diperlukan.
Contohnya,
// 这样用,可能会在后续的逻辑中出现bug foreach ($arr as &$item) { $item['ddd'] = 'ddd'; } // 这样用,就可以避免 array_walk($arr, function (&$item) { $item['ddd'] = 'ddd'; });
Apa-apa pun, ada kebaikan dan keburukan, kelajuan sudah tentu akan memberi impak.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Mari kita bincangkan tentang faedah cara rasmi menulis penutupan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!