gpt4 book ai didi

PHP create_function 结果存储为实例变量,并调用 $object->func()?

转载 作者:行者123 更新时间:2023-12-02 00:34:20 26 4
gpt4 key购买 nike

我正在使用 PHP create_function($args, $code) 函数从数据库动态加载函数定义。

我尝试实现它的方式如下:

我有一个类MyClass,它有一个实例变量myFunction。构造函数使用 create_function 调用的结果填充该实例变量。我希望为此类的特定对象(实例化后)动态创建一个函数,可以将其调用为 $object->myFunction(arg1, arg2);

所以我的类(class)看起来像:

class MyClass {

public $myFunction = '';

public function __construct() {
$this->myFunction = //return function body from DB call.
}


}

然后,我尝试通过执行类似的操作,从程序中的其他位置在实例化的“MyClass”对象上调用此动态函数...

$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

这不起作用,但是如果不是从 Yii::app()->user->postMatching 中提取对象 $pm 我只是创建一个新的一:

$pm = new PostMatching();
$c = $pm->findRelated; //the anon function instance variable

$c(); // THIS WORKS NOW!

所以很自然地,我在“新创建”的情况下以及从 Yii::app( 获取它的情况下) var_dumped $pm$c )->user->postMatching,它们是相同的。唯一不同的是匿名函数的名称(如预期)。

有人知道为什么会出现这种情况吗?在这两种情况下,$pm都是带有该实例变量的实例化PostMatching对象,我只是无法使用语法来调用它!

<小时/>

刚刚用新发现的“Twists”更新了上面的内容,谢谢大家!

最佳答案

也许这些方面的东西可能有用:

class MyClass {

private $myFunction = '';

public function __construct() {
$this->myFunction = //return function body from DB call.
}

public function myFunction() {
$args = func_get_args();
return call_user_func_array($this->myFunction, $args);
}

}

关于PHP create_function 结果存储为实例变量,并调用 $object->func()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com