【发布时间】:2011-10-28 22:40:01
【问题描述】:
这在某种程度上是对上一个问题的跟进 - 但我已经提炼了这个问题,并且更精确地缩小了“有效”与“无效”案例的范围。
我的目标:
我有一个类MyClass,它有一个实例变量myFunction。在创建MyClass 对象(实例化)时,构造函数将调用create_function 的结果分配给实例变量myFunction(其中代码和参数来自db 调用)。
一旦创建了MyClass 类型的对象(并作为另一个类的实例变量存储在别处),我希望能够从我拥有的“任何地方”调用myFunction(实例变量匿名函数) MyClass 对象。
实验用例 -- 下面是我高度简化的测试代码,用于说明哪些有效与哪些无效(即预期功能中断时)
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();
}
}
但是,如果我执行以下操作(在另一个文件中,它会在 Apache 错误日志中显示 undefined function () in... 错误。
//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 的调用的几种变体不起作用。
如果有人能够提供任何见解或帮助,那就太好了:)。
提前致谢!
【问题讨论】:
标签: php yii anonymous-function anonymous-methods