我有一个类,我有一个动态创建的函数(通过“create_function”创建)但我找不到告诉PHP我想要只为这个类创建这个函数(类函数)的方法,因为新函数无法访问对象属性。看看下面的代码:
class Test {
private $var=1;
function __construct() {
call_user_func(create_function('', 'echo $this->var;'));
}
}
new Test;
抛出错误“致命错误:在D:\ WWW \ index.php(7)中不在对象上下文中时使用$ this:在第1行上运行时创建的函数”
答案 0 :(得分:4)
您可能需要runkit_method_add
,而不是create_function
。
答案 1 :(得分:3)
从php 5.4开始,anonymus函数在其上下文中也有$this
。在魔术_call
方法的帮助下,可以将闭包作为方法添加到类中,而无需其他代码:
class Test
{
private $var = 1;
function __construct()
{
$this->sayVar = function() { echo $this->var; };
}
public function __call( $method, $args )
{
if ( property_exists( $this, $method ) ) {
if ( is_callable( $this->$method ) ) {
return call_user_func_array( $this->$method, $args );
}
}
}
}
$test = new Test();
$test->sayVar(); // echos 1