我只是在PHP中使用call_user_func函数,在运行这个简单代码时出现此错误:
<?php
class A
{
public $var;
private function printHi()
{
echo "Hello";
}
public function __construct($string)
{
$this->var = $string;
}
public function foo()
{
call_user_func($this->var);
}
}
$a = new A('printHi');
$a->foo();
?>
我知道如果我在名为printHi的类之外创建一个函数,它工作正常,但我指的是类的print hi并且不确定为什么“this”没有被注册。
答案 0 :(得分:25)
$this->var
正在评估您示例中的printHi
。但是,当您调用类的方法时,需要将回调作为数组传递,其中第一个元素是对象实例,第二个元素是函数名称:
call_user_func(array($this, $this->var));
以下是有效回调的文档:http://www.php.net/manual/en/language.types.callable.php
答案 1 :(得分:1)
除了奥马尔的回答,您还可以使printHi()
成为一个类静态函数,这样您就可以从call_user_func('A::printHi')
调用它,如下所示:
class A
{
public $var;
public static function printHi()
{
echo "Hello";
}
public function __construct($string)
{
$this->var = $string;
}
public function foo()
{
call_user_func($this->var);
}
}
$a = new A('A::printHi');
$a->foo();
请参阅live example