我正在使用 PHPscreate_function($args, $code)
函数从数据库中动态加载函数定义。
我试图实现它的方式如下:
我有一个MyClass
具有实例变量的类myFunction
。构造函数使用调用的结果填充该实例变量create_function
。我希望为此类的特定对象(一旦实例化)动态创建一个函数,该函数可以称为$object->myFunction(arg1, arg2);
所以我的课看起来像:
class MyClass {
public $myFunction = '';
public function __construct() {
$this->myFunction = //return function body from DB call.
}
}
然后,我尝试通过执行类似...
$object = new MyClass();
$object->myFunction(args..);
但是我不断收到错误,例如:
MyClass and its behaviors do not have a method or closure named myFunction.
当我跑步时,var_dump($object->myFunction)
我会返回“lambda_xx”,这是一个好兆头,意味着create_function
至少可以正常工作。
关于有效与无效案例的有趣更新
事实证明,在我的“其他文件”中,我正在执行以下操作:
$pm = Yii::app()->user->postMatching; //This is a PostMatching object made elsewhere
$c = $pm->findRelated;
foreach ($posts as $post) {
var_dump($c);
$postIds = $c($post, $limit);
//post to related mapping
$specificRelatedPostIds[$post->postId] = $postIds;
}
exit; // exiting for testing
这不起作用,但如果不是从中拉出对象$pm
,Yii::app()->user->postMatching
我只是创建一个新对象:
$pm = new PostMatching();
$c = $pm->findRelated; //the anon function instance variable
$c(); // THIS WORKS NOW!
所以我很自然地 var_dumped$pm
并且$c
在“新创建”的情况下和我从中获取它的情况下Yii::app()->user->postMatching
,它们是相同的。唯一不同的是匿名函数的名称(如预期的那样)。
有谁知道为什么会这样?在这两种情况下都是具有该实例变量$pm
的实例化PostMatching
对象,我只是无法使用语法来调用它!
刚刚用新发现的“Twists”更新了上面的内容,谢谢大家!