вызов 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();
посмотреть видео