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('butter', 1); $my_cart->add('milk', 3); $my_cart->add('eggs', 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('error');};//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 중국어 웹사이트의 기타 관련 기사를 참조하세요!