Je suis dans une situation où je dois instancier une classe avec des arguments provenant d'une instance d'une autre classe. Voici le prototype:PHP: Comment instancier une classe avec des arguments provenant d'une autre classe
//test.php
class test
{
function __construct($a, $b, $c)
{
echo $a . '<br />';
echo $b . '<br />';
echo $c . '<br />';
}
}
Maintenant, je dois instancier ci-dessus classe en utilisant ci-dessous cls de classe 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 je tente de créer une instance de classe de test en passant des arguments à elle:
$myclass = new myclass;
$test = $myclass->cls('test', array('a1', 'b2', 'c3'));
il donne l'erreur: Argument manquant 1 et 2; seul le premier argument est passé.
Cela fonctionne très bien si j'instancie une classe qui n'a aucun argument dans sa fonction de constructeur.
Pour les développeurs PHP expérimentés, ce qui précède ne devrait pas poser de problème. S'il vous plaît aider.
Merci
Non lié à votre question, mais $ args sera toujours 'isset' puisque vous lui attribuez array() dans la définition de la fonction. Vous pouvez être intéressé par 'empty', ou' $ args = null'. – Tordek
Je suis désolé, ce n'est pas non plus lié à votre question, mais ce que vous faites n'est pas cool. la réponse à votre question est la suivante: laissez votre constructeur prendre un tableau, avoir des attributs de classe, puis traiter le tableau et le mapper aux attributs de la classe. Mais encore une fois, vous faites quelque chose qui n'est pas cool. – DarthVader
la classe de test et les autres doivent être faits par d'autres développeurs en utilisant leur propre manière avec des arguments et sans lui, donc je ne veux pas les limiter à seulement passer des arguments en tant que tableau aux constructeurs. – Sarfraz