Я просто играю с функцией 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 и не знаю, почему «это» не регистрируется.
$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();
См. Живой пример