call_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 и не знаю, почему «это» не регистрируется.

    $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(); 

    См. Живой пример