je voudrais pouvoir appeler dynamiquement un constructeur de classes avec plusieurs paramètres.
Lorsqu'il n'y a qu'un seul paramètre, c'est pas pas compliqué :
$class = 'Foo';
$myParam = 'bar';
$myFoo = new $class($bar);
Mais avec plusieurs paramètres, c'est plus compliqué. Selon la classe, le nombre de paramètres du constructeur change, donc impossible de prévoir à l'avance.
Du coup, j'ai regardé du côté de user_call_method_array() et user_call_func_array(), qui permettent d'appeler une méthode ou une fonction en passant les paramètres attendus dans un tableau.
De cette manière, j'arrive à appeler soit une méthode d'instance (par exemple $myFoo->getName(), ou bien une fonction ou méthode statique (par exemple Foo::plop()).
Mais pour appeler un constructeur de classe, comment faire ?
Grand merci d'avance, là vraiment je sèche...
# Idem avec l'API de réflexion
Posté par santos . Évalué à 2.
$class = 'Foo';
$reflectedClass = new ReflectionClass($class);
$reflectedConstructor = $reflectedClass->getConstructor();
$args = array(....);
$reflectedConstructor->invokeArgs($instance, $args);
Pareil, même problème ! ReflectionMethod.invokeArgs() demande comme premier paramètre une instance d'objet de la classe concernée... or on veut justement créer cet instance, donc on ne l'a pas encore.
[^] # Re: Idem avec l'API de réflexion
Posté par Jean B . Évalué à 4.
Je m'en suis sortit avec ça :
http://fr.php.net/manual/fr/function.call-user-func-array.ph(...)
J'espère que ça t'aidera.
[^] # Re: Idem avec l'API de réflexion
Posté par santos . Évalué à 2.
C'est exactement ce que je cherchais, et ça fonctionne comme je veux.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.