>백엔드 개발 >PHP 문제 >PHP 클로저의 용도는 무엇입니까?

PHP 클로저의 용도는 무엇입니까?

青灯夜游
青灯夜游원래의
2019-10-10 16:02:243410검색

PHP 클로저란 무엇인가요? 무슨 소용이 있나요? 다음 기사에서는 PHP 클로저에 대해 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

PHP 클로저의 용도는 무엇입니까?

PHP 클로저란 무엇인가요?

PHP 클로저 구현은 주로 익명 함수에 의존합니다.

익명 함수는 일반 함수에서 숫자로 전달될 수도 있고 반환될 수도 있습니다. 간단한 클로저를 구현합니다.

일반인의 용어로: 하위 함수는 상위 함수에서 지역 변수를 사용할 수 있습니다. 이 동작을 클로저라고 합니다.

두 가지 폐쇄 지점:

1. 함수 변수에 대한 참조 - 함수가 반환되면 활성 상태가 됩니다. ?

# 🎜🎜#2. 클로저는 함수가 반환될 때 리소스를 해제하지 않는 스택 영역입니다.

사실 위의 두 지점은 하나의 지점, 즉 클로저 함수가 반환될 때 결합될 수 있습니다. 함수의 내부 변수가 반환되면 활성화된 상태에서 함수가 위치한 스택 영역은 그대로 유지됩니다.

PHP 클로저의 용도는 무엇인가요?

PHP 클로저를 구현하면 함수 내부의 변수를 읽을 수 있을 뿐만 아니라 항상 변수를 메모리에 저장하므로 함수가 실행된 후에도 변수는 항상 존재할 것입니다.


클로저의 여러 기능:

1 foreach 루프를 줄이는 코드#🎜🎜 ##🎜 🎜#예를 들어 http://php.net/manual/en/functions.anonymous.php

<?php
// 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。
// 其中有一个方法用来计算购物车中所有商品的总价格。该方法使用了一个closure作为回调函数。
class Cart
{
    constPRICE_BUTTER  = 1.00;
    constPRICE_MILK    = 3.00;
    constPRICE_EGGS    = 6.95;
 
    protected  $products = array();
     
    publicfunction add($product,$quantity)
    {
        $this->products[$product] =$quantity;
    }
     
    publicfunction getQuantity($product)
    {
        returnisset($this->products[$product]) ?$this->products[$product] :
               FALSE;
    }
     
    publicfunction 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);
        returnround($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";
// The result is 54.29
?>

설명서의 Cart 예제를 변환하면 getTotal 함수를 변환해야 합니다. 여기에서 사용하십시오 foreach

2로 이동하여 함수의 매개변수를 줄입니다.

function html ($code , $id="",$class=""){
 
if ($id !== "") $id= " id = \"$id\"" ;
 
$class = ($class !== "")? " class =\"$class\"":">";
 
$open = "<$code$id$class";
 
$close = "</$code>";
 
return function ($inner= "")use ($open,$close){
 
return "$open$inner$close";};
 
}
일반적인 방법을 사용하면 내부 따라서 코드를 읽거나 사용하든 클로저

3을 사용하는 것이 좋습니다.

<?php
    $fib= function($n)use(&$fib) {
        if($n== 0 || $n == 1) return 1;
        return$fib($n- 1) + $fib($n- 2);
    };
 
   echo$fib(2) . "\n";// 2
   $lie= $fib;
   $fib= function(){die(&#39;error&#39;);};//rewrite $fib variable
   echo$lie(5); // error   because $fib is referenced by closure
# 🎜🎜#위 질문에서 use의 사용에 주의하세요 &, 여기에서 &를 사용하지 않으면 에러가 발생합니다. n-1) 함수를 찾을 수 없습니다(fib 유형이 이전에 정의되지 않았습니다) #🎜 🎜#따라서 루프 기능을 취소하기 위해 클로저를 사용하려는 경우 #을 사용해야 합니다. 🎜🎜#
<?php
$recursive= function () use (&$recursive){
// The function is now available as $recursive
}
이 양식

4. 지연 바인딩

지연 바인딩 사용 변수가 필요한 경우 참조를 사용해야 합니다. 그렇지 않으면 정의할 때 복사본이 만들어져 사용됩니다.

<?php
$result = 0;
 
$one = function()
{ var_dump($result); };
 
$two = function() use ($result)
{ var_dump($result); };
 
$three = function() use (&$result)
{ var_dump($result); };
 
$result++;
 
$one();   // outputs NULL: $result is not in scope
$two();   // outputs int(0): $result was copied
$three();   // outputs int(1)

참조를 사용하거나 사용하지 않음은 함수 호출 시 또는 함수 선언 시 값이 할당되는지를 의미합니다. AssignmentPHP 관련 더 많은 지식을 보려면

PHP中文网

을 방문하세요!

위 내용은 PHP 클로저의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.