2013-06-25 2 views
3

http://php.net/manual/en/functions.anonymous.php에 따르면 PHP는 $this 인 문맥에서 함수가 정의 되더라도 암시 적 함수 내부에서는 $this에 액세스 할 수 없습니다. 이 제한을 해결할 수있는 방법이 있습니까? (그런데, 웹 서버에서 PHP 설치를 업그레이드하는 것은 불가능합니다)

암시 적 함수를 사용하는 방법은 어떤 객체의 멤버 함수 인 콜백을 정의하는 것입니다. 수 있어야 함수 이름 : 더 정확하게, 나는 사실, 이벤트 더 나은 구문

$callback = $this->my_callback 

$callback = function() { return $this->my_callback(); } 

같은 것을 할 싶습니다하지만 그것이 작동 할 수 없습니다 (PHP는 "치명적인 오류로 사망 문자열 "내가 콜백을 실행하려고 할 때). 당신이 콜백 함수에 변수를 전달할 수 있습니다처럼 (아마 call_user_func()와 결합)

+0

모든 것이 PHP의 최상위 객체 인 경우 –

답변

4

은 일을해야 그것은 매개 변수로.

가끔 $self 또는 $that과 같은 표기법을 사용하는 것이 더 명확한 경우도 있습니다.

+0

필자의 경우 가장 좋은 접근 방법이지만, 그러한 트릭이 필요하다는 것을 당황스럽게 생각하지만 직접'use ($ this)'를 쓸 수는 없습니다. 감사. –

+0

필자는 PHP 5.4 이전에이 문제에 직면 해있었습니다. 그 느낌을 알고 있습니다. – vikingmaster

+0

5.4에서이 접근법의 주된 차이점에 주목할 필요가 있습니다.이를 사용하여 보호 된/개인용 메서드에 액세스 할 수 없습니다. 5.4에서 클로저는 클래스가 생성 된 클래스의 범위에 바인딩되어 있기 때문에 비공개 기능에 액세스 할 수 있습니다. 또한 5.3은 수명이 다해 가고 있으며 [보안 수정이 필요한 경우에만 지원됩니다.] (http://news.php.net/php.internals/67734) ** 업그레이드해야합니다. * * – rdlowrey

1
$function = array($this, 'my_callback'); 

0

것 같습니다. 나는 PHP의 폐쇄와 함께 일하지 않은,하지만 난이 당신을 위해 일 것이라고 생각 :

$callback = function($instance) { return $instance->my_callback(); } 
$callback($this); 

또는 콜백은 현재 클래스 외부 트리거되는 경우. 기능 범위에 선언에

$object = $this ; 
$callback = function() use ($object) { return $object->my_callback(); } ; 

use가 (우리의 경우 개체의 참조) 접근 가능한 변수를 가져올 것이다, 그래서 당신은 보낼 필요가 없습니다 :

$callback($myClassInstance); 
관련 문제