call_user_func() 期望参数 1 是有效的回调

2022-08-31 00:48:05

我只是在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”没有被注册。


答案 1

$this->var在您的示例中正在评估到。但是,在调用类的方法时,需要将回调作为数组传递,其中第一个元素是对象实例,第二个元素是函数名称:printHi

call_user_func(array($this, $this->var));

以下是有关有效回调的文档:http://www.php.net/manual/en/language.types.callable.php


答案 2

或者,对于Omar的答案,你也可以做一个类静态函数,这样你就可以从 调用它,就像这样: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();

查看实时示例


推荐