web-dev-qa-db-fra.com

call_user_func () s'attend à ce que le paramètre 1 soit un rappel valide

Je suis en train de jouer avec la fonction call_user_func dans PHP et j'obtiens cette erreur en exécutant ce code simple:

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


?>

Je sais que si je crée une fonction en dehors de la classe appelée printHi, cela fonctionne bien, mais je fais référence à print hi de la classe et je ne sais pas pourquoi le "ceci" n'est pas enregistré.

14
thed0ctor

$this->var est évalué à printHi dans votre exemple. Toutefois, lorsque vous appelez une méthode d'une classe, vous devez passer le rappel sous la forme d'un tableau dont le premier élément est l'instance de l'objet et le second élément est le nom de la fonction:

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

Voici la documentation sur les rappels valides: http://www.php.net/manual/fr/language.types.callable.php

25

À la place de la réponse d'Omar, vous pouvez également faire de printHi() une fonction statique de classe. Vous pourrez alors l'appeler à partir de call_user_func('A::printHi'), comme ceci:

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

Voir exemple live

1
Nelson