Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Вместо ответа Omar вы также можете сделать статическую функцию класса 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();

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