이것은 이전 질문에 대한 후속 조치입니다. 그러나 질문을 추출하고 "works"대 "does not work"사례를 사용했습니다 훨씬 더 정확하게 좁혀졌다.PHP create_function 인스턴스 변수 - 익명 함수를 호출 할 수 없습니다 : 후속 조치
내 목표 : 나는 myFunction
변수 인스턴스가있는 클래스 MyClass
있습니다. MyClass
객체를 만들 때 (인스턴스 생성) 생성자는 인스턴스 변수 myFunction
에 create_function
(여기서 코드와 arg는 db 호출에서 온 것입니다)에 대한 호출 결과를 할당합니다. 유형 MyClass
의 객체가 생성 (다른 곳에서 다른 클래스의 인스턴스 변수로 저장) 내가 "어디서나"나는 MyClass
개체가 그에서 myFunction
(인스턴스 변수 익명 함수)를 호출 할 수 있도록하려는되면
.
실험 케이스 - 아래하지 않는 것을 대 어떤 작품 설명하기 위해 내 매우 단순화 된 테스트 코드가 (즉, 경우에 예상되는 기능 나누기) 그러나
class MyClass extends AnotherClass {
public $myFunction;
function __construct() {
$functionCode = 'echo "NyanNyanNyan";';
$this->myFunction();
/*Now the following code works as expected if put in here for testing*/
$anonFunc = $this->myFunction;
$anonFunc(); //This call works just fine (echos to page)!
/*And if i make this call, it works too! */
self::TestCallAnon();
}
public function TestCallAnon() {
$anonFunc2 = $this->myFunction;
$anonFunc2();
}
}
, 내가 할 경우 아파치 오류 로그 내에서 ... 다음 (다른 파일에, 그것은 오류가 말하는 정의되지 않은 기능().
//I'm using Yii framework, and this is getting the user
//objects instance variable 'myClass'.
$object = Yii::app()->user->myClass;
$object->TestCallAnon(); // **FAILS**
나 또한
$func = $object->myFunction;
$func(); // ** ALSO FAILS **
, call_user_func
및 call_user_func_array
호출의 몇 가지 변화가 작동하지 않습니다. 누구나 통찰력이나 도움이된다면 큰 도움이 될 것입니다. :).
미리 감사드립니다.
의견을 보내 주셔서 감사합니다. 나는 실제로 'call_user_func (array ($ object, $ funcName), array())'를 행운으로 시도했다. 'behaviors는 메소드 또는 클로저라는 이름이 없습니다. "라는 오류가 발생합니다. $ funcName이 비어 있다는 의미입니다. 하지만 위의 줄에 $ funcName을 표시하면 "lambda_3"이 표시됩니다. – csjohn
'call_user_func'에서 얻을 수있는 PHP 오류와 비슷하지 않습니다. – Halcyon