PHP create_function实例变量 - 无法调用匿名函数:跟进

时间:2011-10-28 22:40:02

标签: php yii anonymous-function anonymous-methods

这有点是前一个问题的后续问题 - 但是我已经提出了问题并将“工作”与“不工作”的案例更加精确地缩小了。

我的目标: 我有一个类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_funccall_user_func_array的几种调用都不起作用。

如果有人能够提供任何有用的见解或帮助:)。

提前致谢!

2 个答案:

答案 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)

我最终通过一种解决方法解决了这个问题,最终成为了一个更好的选择。

最后,我得到了一个静态类,它有一个方法可以随机返回一个可能的标识符,然后是另一个接受该标识符的方法,用于在每个类上构建匿名函数。

略微不如我想要的那么优雅,但它最终运作良好。

感谢大家的努力。