вызов user func () ожидает, что параметр 1 будет допустимым обратным вызовом

Я просто играю с функцией call_user_func в PHP и получаю эту ошибку при запуске этого простого кода:

<?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, она работает нормально, но я имею в виду печать класса hi и не уверен, почему "это" не регистрируется.

2 ответов


$this->var оценивает в printHi в вашем примере. Однако при вызове метода класса необходимо передать обратный вызов в виде массива, в котором первый элемент является экземпляром объекта, а второй - именем функции:

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

вот документация по допустимым обратным вызовам:http://www.php.net/manual/en/language.types.callable.php


альтернативно ответу Омара, вы также можете сделать 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();

посмотреть видео