php의 클로저(Closure) 익명 function_php 스킬에 대한 자세한 설명
PHP의 클로저(Closure)는 PHP5.3부터 도입된 익명함수입니다.
클로저의 구문은 매우 간단합니다. 주의가 필요한 유일한 키워드는 클로저와 외부 변수를 연결하는 use입니다.
$a = 함수() 사용($b) {}
간단한 예는 다음과 같습니다.
함수 콜백($fun) {
$재미();
}
$msg = "안녕하세요 여러분";
$fun = 함수 () 사용($msg) {
print "이것은 클로저 사용 문자열 값입니다. msg는 $msg입니다.
/n";
};
$msg = "안녕하세요 여러분";
콜백($fun);
결과는 다음과 같습니다. 클로저 사용 문자열 값입니다. msg는 다음과 같습니다.
/n
PHP의 새로운 개방형 클로저 구문에서는 클로저 외부에 정의된 변수를 사용하기 위해 use를 사용합니다. 여기서는 외부 변수 $msg를 사용합니다. 정의된 후 해당 값이 변경되고 클로저가 실행되면 원래 값이 출력됩니다. 값으로 전달되는 기본 유형 매개변수의 경우 클로저 사용 값은 클로저가 생성될 때 결정됩니다.
미니어플리케이션은 다음과 같습니다.
/**
* 클로저를 사용한 카운터 생성기
* 실제로 Python에 도입된 클로저의 예를 기반으로 한 것입니다...
* 우리는 다음과 같이 생각할 수 있습니다:
* 1. 카운터 함수가 호출될 때마다 지역 변수 $counter가 생성되어 1로 초기화됩니다.
* 2. 그런 다음 로컬 변수 $counter에 대한 참조를 생성하는 클로저를 만듭니다. * 3. counter 함수는 생성된 클로저를 반환하고 로컬 변수를 소멸하는데 이때 클로저에서 $counter에 대한 참조가 있습니다.
* 재활용되지 않습니다. 따라서 함수 카운터에 의해 반환된 클로저는 무료
를 전달하는 것으로 이해할 수 있습니다. * 변수
* 4. 각 카운터 호출은 독립적인 $counter 및 클로저를 생성하므로 반환된 클로저는 서로 독립적입니다.
* 5. 반환된 클로저를 실행하고, 포함된 자유 상태 변수를 증가시키고 반환하면 결과는 카운터입니다
. * 결론: 이 기능은 독립적인 카운터를 생성하는 데 사용할 수 있습니다.
*/
함수 카운터() {
$카운터 = 1
반환 함수() use(&$counter) {return $counter ;}; }
$counter1 = 카운터()
$counter2 = 카운터()
echo "counter1: " . $counter1() . "
/n"; echo "counter1: " . $counter1() . "
/n"; echo "counter1: " . $counter1() . "
/n"; echo "counter1: " . $counter1() . "
/n"; echo "counter2: " . $counter2() . "
/n"; echo "counter2: " . $counter2() . "
/n"; echo "counter2: " . $counter2() . "
/n"; echo "counter2: " . $counter2() . "
/n"; ?>
마감의 역할
1. foreach 루프의 코드를 줄입니다
예를 들어, 매뉴얼의 예시 Cart
코드 복사
코드는 다음과 같습니다.
// 추가된 일부 항목과 각 항목의 수량을 포함하는 기본 장바구니입니다.
// 장바구니에 담긴 모든 품목의 총 가격을 계산하는 데 메소드 중 하나가 사용됩니다. 이 메서드는 클로저를 콜백 함수로 사용합니다.
클래스 카트
{
const PRICE_BUTTER = 1.00;
const PRICE_MILK = 3.00;
const PRICE_EGGS = 6.95;
$products = array();
공개 기능 추가($product, $quantity)
{
$this->제품[$product] = $수량;
}
공개 함수 getQuantity($product)
{
반환 isset($this->products[$product]) ? $this->products[$product] :
거짓;
}
공개 함수 getTotal($tax)
{
$total = 0.00;
$callback =
함수($yang, $product) 사용($tax, &$total)
{
$pricePerItem = 상수(__CLASS__ . "::PRICE_" .
strtoupper($product));
$total = ($pricePerItem * $Quantity) * ($tax 1.0);
};
//사용자 정의 함수를 사용하여 배열의 각 요소에 대해 콜백 처리를 수행합니다
array_walk($this->products, $callback);
왕복($total, 2);;
}
}
$my_cart = 새 장바구니;
// 장바구니에 항목 추가
$my_cart->add('버터', 1);
$my_cart->add('우유', 3);
$my_cart->add('계란', 6);
// 판매세 5%를 포함한 총 가격을 출력합니다.
$my_cart->getTotal(0.05) "n"을 인쇄합니다.
// 결과는 54.29
?>
여기서 getTotal 함수를 변환하려면 foreach를 사용해야 합니다.
2. 기능 매개변수 줄이기
함수 html($code , $id="", $class=""){
if ($id !== "") $id = " id = "$id"" ;
$class = ($class !== "")? " 클래스 ="$class">":">";
$open = "<$code$id$class";
$close = "$code>";
반환 함수($inner = "") 사용($open, $close){
"$open$inner$close"를 반환합니다.
};
}
일반적인 방법을 사용한다면 html 함수 매개변수에 inner 를 넣을 것이기 때문에 코드를 읽을 때나 사용할 때나 클로저를 사용하는 것이 더 좋습니다.
3. 재귀 기능 잠금 해제
$fib = 함수($n) 사용(&$fib) {
If($n == 0 || $n == 1) 1을 반환합니다.
$fib($n - 1) $fib($n - 2) 반환;
};
에코 $fib(2) . "n" // 2
$거짓말 = $fib;
$fib = function(){die('error');};//$fib 변수 다시 쓰기
echo $lie(5); // $fib가 클로저에 의해 참조되었기 때문에 오류가 발생했습니다
위 질문에서 &를 사용한다는 점에 유의하세요. 여기서 &를 사용하지 않으면 fib(n-1)이 함수를 찾을 수 없습니다(fib 유형이 이전에 정의되지 않았습니다)
따라서 루프 기능을 취소하기 위해 클로저를 사용하려면
을 사용해야 합니다.$recursive = 함수 () 사용 (&$recursive){
// 이제 이 함수를 $recursive
로 사용할 수 있습니다. }
이 양식입니다.
4. 지연 바인딩
사용 중인 변수 바인딩을 지연해야 하는 경우 참조를 사용해야 합니다. 그렇지 않으면 정의할 때 복사본이 만들어져 사용됩니다.
$결과 = 0;
$one = 함수()
{
var_dump($result);
};
$two = function() 사용 ($result)
{
var_dump($result);
};
$3 = function() 사용 (&$result)
{
var_dump($result);
};
$결과 ;
$one(); // NULL 출력: $result가 범위에 속하지 않습니다
$two(); // int(0) 출력: $result가 복사되었습니다
$3(); // int(1)을 출력합니다
참조를 사용하는지 여부는 해당 값이 호출 시 할당되는지 아니면 선언될 때 지정되는지를 나타냅니다.
이 기사가 여러분에게 몇 가지 팁을 줄 수 있기를 바라며, 마음에 드셨으면 좋겠습니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
