이 글에서는 주로 PHP 클로저에 대한 자세한 설명과 예제 코드에 대한 관련 정보를 소개합니다. 도움이 필요한 친구들은 PHP5.3.0에 도입된
클로저와 익명 기능을 참고하세요.
클로저란 생성 시 주변 상태를 캡슐화하는 기능을 말합니다. 클로저가 위치한 환경이 더 이상 존재하지 않더라도 클로저에 캡슐화된 상태는 여전히 존재합니다.
이론적으로 클로저와 익명 함수는 다른 개념입니다. 그러나 PHP는 이를 동일한 개념으로 취급합니다.
사실 클로저와 익명 함수는 함수로 위장한 객체입니다. Closure 클래스의 인스턴스입니다.
문자열 및 정수와 같은 클로저는 일급 값 유형입니다.
Create closure
<?php $clousre = function ($name) { return 'Hello ' . $name; }; echo $closure('nesfo');
$closure 변수를 호출할 수 있는 이유는 이 변수의 값이 클로저이고 클로저 객체가 호출()magic 메소드을 구현하기 때문입니다. 변수 이름 뒤에 ()가 있으면 PHP는 호출() 메서드를 찾아 호출합니다. PHP 클로저는 일반적으로 함수의 콜백으로 사용됩니다. array_map() 및 preg_replace_callback() 메소드는 모두 콜백 함수를 사용합니다. 지금이 클로저를 사용하기에 가장 좋은 시기입니다!
예:
<?php $numbersPlusOne = array_map(function ($number) { return $number + 1; }, [1, 2, 3]); print_r($numbersPlusOne);
는 다음과 같은 결과를 얻습니다.
[2, 3, 4]
클로저 전에는 이름이 지정된 함수만 개별적으로 생성한 다음 해당 함수를 이름으로 참조할 수 있습니다. 이렇게 하면 코드 실행이 약간 느려지고 콜백 구현이 사용 시나리오에서 격리됩니다.
<?php function incrementNum ($number) { return $number + 1; } $numbersPlusOne = array_map('incrementNum', [1, 2, 3]); print_r($numbersPlusOne);
추가 상태
익명 함수는 콜백으로 사용될 수 있을 뿐만 아니라 PHP에 대한 상태를 첨부하고 캡슐화할 수도 있습니다.
PHP에서는 클로저 개체의 바인딩To() 메서드를 수동으로 호출하거나 use 키워드를 사용하여 상태를 PHP 클로저에 연결해야 합니다.
<?php function enclosePerson ($name) { return function ($doCommand) use ($name) { return $name . ', ' . $doCommand; } } $clay = enclosePerson('Clay'); echo $clay('get me sweet tea!');
결과 얻기:
"Clay, get me sweet tea!"
PHP 클로저는 객체이며 각 클로저 인스턴스는 $this 키워드를 사용하여 클로저의 내부 상태를 가져올 수 있습니다. 클로저 객체의 기본 상태는 쓸모가 없으며, 오직 informo() 메소드와 바인딩To 메소드만 있습니다.
bindTo() 메소드를 사용하여 Closure 객체의 내부 상태를 다른 객체에 바인딩할 수 있습니다.
bindTo() 메소드의 두 번째 매개변수: 해당 기능은 바인딩 클로저의 객체가 속하는 PHP 클래스를 지정하는 것입니다. 따라서 클로저는 클로저가 바인딩된 개체의 보호된 멤버와 전용 멤버에 액세스할 수 있습니다.
PHP 프레임워크는 라우팅 URL을 익명 콜백 함수에 매핑하기 위해 종종 BindTo() 메서드를 사용합니다. 이렇게 하면 $this 키워드를 사용하여 이 익명 함수에서 중요한 응용 프로그램 개체를 참조할 수 있습니다.
bindTo() 메서드를 사용하여 클로저 상태를 연결하세요
<?php class App { protected $routes = []; protected $responseStatus = '200 OK'; protected $responseContentType = 'text/html'; protected $responseBody = 'Hello world'; public function addRoute($routePath, $routeCallback){ $this->routes[$routePath] = $routeCallback->bindTo($this, CLASS); } public function dispatch($currentPath){ foreach($this->routes as $routePath => $callback){ if ($routePath === $currentPath) { $callback(); } } header('HTTP/1.1' . $this->responseStatus); header('Content-type: ' . $this->responseContentType); header('Content-length' . mb_strlen($this->responseBody)); echo $this->responseBody; } }
<?php $app = new App(); $app->addRoute('/user/nesfo', function () { $this->responseContentType = 'application/json; charset=utf8'; $this->responseBody = '{"name": "nesfo"}'; }); $app->dispatch('/user/nesfo');
위 내용은 PHP 클로저란 무엇입니까? 클로저 사용 예시에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!