这有点是前一个问题的后续问题 - 但是我已经提出了问题并将“工作”与“不工作”的案例更加精确地缩小了。
我的目标:
我有一个类MyClass
,它有一个实例变量myFunction
。在创建MyClass
对象(实例化)时,构造函数将实例变量myFunction
分配给create_function
的调用结果(其中代码和args来自db调用)。 / p>
一旦创建了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错误日志中错误地说未定义的函数()... 。
//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
的几种调用都不起作用。
如果有人能够提供任何有用的见解或帮助:)。
提前致谢!
答案 0 :(得分:1)
您无法像在JavaScript中那样传递对PHP中函数的引用。
call_user_func
功能有限。您可以像这样使用它:
class MyClass {
function func() {}
static function func() {}
}
function myfunc() {}
$i = new MyClass();
call_user_func("myfunc", $args);
call_user_func(array($i, "func"), $args);
call_user_func(array(MyClass, "staticFunc"), $args);
答案 1 :(得分:0)
我最终通过一种解决方法解决了这个问题,最终成为了一个更好的选择。
最后,我得到了一个静态类,它有一个方法可以随机返回一个可能的标识符,然后是另一个接受该标识符的方法,用于在每个类上构建匿名函数。
略微不如我想要的那么优雅,但它最终运作良好。
感谢大家的努力。