Voici la prémisse:arguments de la fonction dynamique et en utilisant __call
J'ai beaucoup de classes où je dois effectuer une action AVANT toute méthode de l'une des classes est appelé, était ma solution pour avoir toutes les classes s'étendre un classe parente qui définirait une fonction call() qui ressemblerait à ceci:
public function call($method){
//do the something I need to do before method calls
$params = func_get_args();
//remove the $method param from the $params array
unset($params[0]);
return $this->__call($method,$params);
}
et puis appelez simplement la méthode d'appel et préciser la méthode réelle que je voulais appeler, de cette façon la méthode obtiendrait appelé, mais à l'intérieur méthode d'appel (dont la classe hérite de ma classe parente) Je pourrais effectuer l'action dont j'avais besoin avant d'obtenir la méthode spécifiée appelé. Cela doit pouvoir prendre en charge les arguments qui peuvent être des tableaux ou des chaînes, donc tout ce qui implique l'implosion d'un tableau d'arguments ne fonctionnera pas (puisque cela supposerait que tous les arguments sont des chaînes). Je ne suis pas sûr si ce que j'ai ci-dessus est logique, et je voulais vérifier et voir si je vais à ce sujet dans le mauvais sens ou non.
Toutes les idées/pensées seraient grandement appréciées.
Merci! PS: Je dois noter que ma description de la situation ci-dessus donne l'impression que la raison pour laquelle les classes enfants étendent le parent est simplement à cette fin, en réalité il y a plus de raisons (ma classe parente étend Zend_Db_Table_Abstract et mes modèles de base de données étendre le parent).
Ouais, j'ai réalisé après une falsification __call, ce n'est pas conçu pour être utilisé de la manière que je tente de l'utiliser. Je suppose que mon problème actuel est de pouvoir passer un tableau de valeurs mixtes (certains tableaux, certaines chaînes etc ...) en tant qu'arguments séparés de la méthode appelée. – machinemessiah
Qu'est-ce qui vous empêcherait de transmettre un tableau de valeurs mixtes en tant qu'arguments? N'est-ce pas ce que 'call_user_func' est pour? – theazureshadow
Pas call_user_func, mais call_user_func_array, le premier passe simplement votre tableau d'arguments en un seul argument (un tableau), ce dernier a résolu mon problème, merci pour votre poussée dans la bonne direction! – machinemessiah