객체 속성에 할당된 클로저를 직접 호출
PHP에서 객체 속성에 할당된 클로저를 직접 호출하려고 하면 제한이 있습니다. 제공된 코드에 설명된 대로:
$obj = new stdClass(); $obj->callback = function() { print "HelloWorld!"; }; $obj->callback();
이 코드는 "치명적인 오류: 정의되지 않은 메서드 stdClass::callback() 호출" 오류와 함께 실패합니다. 이를 해결하기 위해 PHP 7에서는 직접 호출 방식을 도입했습니다.
PHP 7 이상
PHP 7 이상에서는 객체 속성에 할당된 클로저를 직접 호출할 수 있습니다. 다음 구문:
$obj = new stdClass; $obj->fn = function($arg) { return "Hello $arg"; }; echo ($obj->fn)('World');
PHP 이전 7
PHP 7 이전에는 객체 속성에 할당된 클로저를 직접 호출하는 것이 불가능했습니다. 대신 호출을 가로채고 클로저를 호출하는 마법의 __call 메소드를 구현해야 했습니다.
class Foo { public function __call($method, $args) { if(is_callable(array($this, $method))) { return call_user_func_array($this->$method, $args); } // else throw exception } } $foo = new Foo; $foo->cb = function($who) { return "Hello $who"; }; echo $foo->cb('World');
참고: __call에서는 call_user_func_array(array($this) 호출을 피하는 것이 중요합니다. , $방법), $args); 이는 무한 재귀를 유발하기 때문입니다.
위 내용은 PHP에서 개체 속성에 할당된 클로저를 직접 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!