call_user_func() expects parameter 1 to be a valid callback
$this->var
is evaluating to printHi
in your example. However, when you are calling a method of a class, you need to pass the callback as an array where the first element is the object instance and the second element is the function name:
call_user_func(array($this, $this->var));
Here is the documentation on valid callbacks: http://www.php.net/manual/en/language.types.callable.php
Alternatively to Omar's answer, you can also make printHi()
a class static function, so you then can call it from call_user_func('A::printHi')
, like this:
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();
See live example