먼저, 공식적으로 설명된 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의 차이점은 무엇인가요? 루프 수와 크기가 동일해야 합니까?
답변:
을 사용하면 코드를 더 쉽게 재사용할 수 있고 제공된 기능에 더 많은 가능성을 제공할 수 있습니다.
예를 들어 정렬은 크기를 비교한 후 위치를 교환하는 것에 지나지 않습니다. 위치를 교환하는 로직은 통일되어 있지만 크기를 비교하는 경우가 많기 때문에 사용 위치를 결정할 수 있도록 클로저 콜백을 제공합니다. 누가 더 크고 누가 더 작은지.
다른 하나는 몇 가지 기본적인 방법을 통해 코드를 더 읽기 쉽게 만드는 것입니다.
예를 들어, 예제를 array_reduce로 변경하는 것이 더 적절할 것입니다. 그러면 다른 사람들이 이를 볼 때 단일 변수로 계산하려는 값이 무엇인지 알 수 있을 것입니다. 하지만 클로저 함수를 매개변수에 직접 작성하는 것이 가장 좋습니다.
배열 탐색의 경우 초기에는 foreach에 문제가 많았고 잘못 사용하면 불필요한 버그가 발생했습니다.
예를 들어
// 这样用,可能会在后续的逻辑中出现bug foreach ($arr as &$item) { $item['ddd'] = 'ddd'; } // 这样用,就可以避免 array_walk($arr, function (&$item) { $item['ddd'] = 'ddd'; });
어쨌든 장단점이 있고 속도는 물론 영향을 미치게 됩니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP 클로저를 작성하는 공식적인 방법의 이점에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!