2011-01-18 1 views
0

Je reçois l'ancienne erreur familière "Erreur irrécupérable: Utiliser $ this quand il n'est pas dans un contexte d'objet" en référence à $this->test = 'test'; dans la classe suivante:

class Example { 
    public $test; 
    public function index() { 
     $this->test = 'test'; 
    } 
} 

La méthode de classe est appelée via call_user_func_array(array('example', 'index'), $params);. Je peux seulement supposer que call_user_func_array a pour une raison quelconque décidé d'appeler la méthode d'index comme statique, par ex. example::index()? Cependant, je n'ai pas trouvé de solution à ce problème et bizarrement, je n'ai pas eu de problème avec cela jusqu'à récemment.

Répondre

5

Cela fonctionne:

$obj = new Example(); 
call_user_func_array(array($obj, 'index'), $params); 

Votre code fait essentiellement:

Example::index($params); 

qui index appels statiquement, que vous supposiez correctement.

+0

Oublié de mentionner que je fais usage de l'auto-chargement désolé. J'étais sous l'impression que call_user_func_array le ferait sans avoir à instancier la classe manuellement. Ce n'est pas le cas? –

+0

@Riddian Nope. Ce n'est pas. Il n'y aurait aucun moyen d'effectuer des appels statiques. BTW: ce comportement va pour toutes les fonctions PHP prenant des callbacks (comme ['usort'] (http://de2.php.net/manual/fr/function.usort.php) et les goûts). Voir [Pseudo-types et variables ...] (http://de2.php.net/manual/fr/language.pseudo-types.php#language.types.callback). –

+0

Bien compris. Le plus utile merci! –

Questions connexes