PHP에서 객체의 클로저 속성을 직접 호출할 수 없는 이유는 무엇이며 어떻게 해결할 수 있습니까?
객체 속성 클로저 직접 호출
객체의 속성에 클로저를 할당할 때 클로저를 다시 할당하지 않고 직접 호출하는 데 어려움을 겪을 수 있습니다. 변수. 다음 예를 고려하십시오.
$obj = new stdClass(); $obj->callback = function() { print "HelloWorld!"; };
안타깝게도 $obj->callback()을 호출하려고 하면 "치명적인 오류: 정의되지 않은 메서드 stdClass::callback() 호출" 오류가 발생합니다.
PHP 7 솔루션
PHP 7에서는 화살표를 사용하여 함수(PHP 7.4에 도입됨)를 사용하면 다음과 같이 객체의 속성에 할당된 클로저를 직접 호출할 수 있습니다:
$obj = new StdClass; $obj->fn = function($arg) { return "Hello $arg"; }; echo ($obj->fn)('World');
Closure::call()
For 7 이하의 PHP 버전에서는 Closure::call() 함수를 사용하는 것이 대안입니다. 그러나 이 메서드는 StdClass 인스턴스에는 적용되지 않습니다.
Magic __call 메서드
PHP 7 이전에는 가로채기를 허용하는 Magic __call 메서드를 구현하는 것이 실행 가능한 접근 방식이었습니다. 정의되지 않은 메서드를 호출합니다. 다음 예에서는 __call 구현을 통해 Foo 클래스가 생성됩니다.
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 본문 내에서 동일한 메서드가 호출되는 것을 방지하여 무한 재귀를 방지합니다.
위 내용은 PHP에서 객체의 클로저 속성을 직접 호출할 수 없는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 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)

뜨거운 주제











Laravel Back End : Part 2, React가있는 React 앱 구축

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법
