PHP: Comment instancier une classe avec des arguments provenant d'une autre classe
Je suis dans une des situations où j'ai besoin d'instancier une classe avec des arguments, au sein d'une instance d'une autre classe.
Voici le prototype:
//test.php
class test
{
function __construct($a, $b, $c)
{
echo $a . '<br />';
echo $b . '<br />';
echo $c . '<br />';
}
}
Maintenant, j'ai besoin d'instancier la classe ci-dessus à l'aide de ci-dessous de la classe cls fonction:
class myclass
{
function cls($file_name, $args = array())
{
include $file_name . ".php";
if (isset($args))
{
//this is where the problem might be, i need to pass as many arguments as test class has.
$class_instance = new $file_name($args);
}
else
{
$class_instance = new $file_name();
}
return $class_instance;
}
}
Maintenant lorsque j'essaie de créer une instance de la classe de test en passant des arguments à:
$myclass = new myclass;
$test = $myclass->cls('test', array('a1', 'b2', 'c3'));
Il donne une erreur:
Missing argument 1 et 2; seulement le premier argument est passé.
Cela fonctionne bien si j'instancie une classe qui n'a pas d'argument dans la fonction constructeur.
Pour les développeurs PHP, ci-dessus ne devrait pas être beaucoup d'un problème. S'il vous plaît aider.
Grâce
source d'informationauteur Sarfraz
Vous devez vous connecter pour publier un commentaire.
vous avez besoin de Réflexion http://php.net/manual/en/class.reflectionclass.php
Vous pouvez:
1) Modifier la classe de test pour accepter un tableau, qui contient les données que vous souhaitez passer.
2) lancer à l'aide d'un utilisateur plutôt la méthode du constructeur et de l'appeler à l'aide de la
call_user_func_array()
fonction.Dans votre classe principale:
http://www.php.net/manual/en/function.call-user-func-array.php
Enfin, vous pouvez laisser votre constructeur params vierge et l'utilisation
func_get_args()
.http://sg.php.net/manual/en/function.func-get-args.php
Vous pouvez utiliser call_user_func_array() je crois.
ou vous pouvez quitter la liste des arguments du constructeur, puis à l'intérieur du constructeur de l'utilisation de ce
$objet = new textProperty($start, $fin);
ne fonctionnent pas?
La façon la plus simple que j'ai trouvé:
Désolé, un peu brute, mais vous devez comprendre l'idée.