>  기사  >  백엔드 개발  >  PHP 클로저를 작성하는 공식적인 방법의 이점에 대해 이야기해 보겠습니다.

PHP 클로저를 작성하는 공식적인 방법의 이점에 대해 이야기해 보겠습니다.

藏色散人
藏色散人앞으로
2021-12-29 14:54:504009검색

먼저, 공식적으로 설명된 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(&#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);
            };

이 코드와 foreach의 차이점은 무엇인가요? 루프 수와 크기가 동일해야 합니까?

답변:

을 사용하면 코드를 더 쉽게 재사용할 수 있고 제공된 기능에 더 많은 가능성을 제공할 수 있습니다.

예를 들어 정렬은 크기를 비교한 후 위치를 교환하는 것에 지나지 않습니다. 위치를 교환하는 로직은 통일되어 있지만 크기를 비교하는 경우가 많기 때문에 사용 위치를 결정할 수 있도록 클로저 콜백을 제공합니다. 누가 더 크고 누가 더 작은지.

다른 하나는 몇 가지 기본적인 방법을 통해 코드를 더 읽기 쉽게 만드는 것입니다.

예를 들어, 예제를 array_reduce로 변경하는 것이 더 적절할 것입니다. 그러면 다른 사람들이 이를 볼 때 단일 변수로 계산하려는 값이 무엇인지 알 수 있을 것입니다. 하지만 클로저 함수를 매개변수에 직접 작성하는 것이 가장 좋습니다.

배열 탐색의 경우 초기에는 foreach에 문제가 많았고 잘못 사용하면 불필요한 버그가 발생했습니다.

예를 들어

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

어쨌든 장단점이 있고 속도는 물론 영향을 미치게 됩니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP 클로저를 작성하는 공식적인 방법의 이점에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제