2011-11-26 4 views
0

Je suis conscient de l'existence de call_user_func_array, mais je ne crois pas que vous puissiez l'utiliser pour construire une classe (si vous le pouvez, comment le faites-vous?). Tant que je ne me trompe pas, comment instancier une classe avec un tableau en tant que paramètres?Instancier une classe avec un tableau en tant que paramètres

par exemple:

class Test { 
    public function __construct($var1, $var2) { 
     // do something 
    } 
} 

comment pourrais-je instancier avec ceci: tableau ("de var1_data", "var2_data")

+0

Voulez-vous construire objet avec un nombre inconnu d'arguments ou un seul argument qui est un tableau? –

Répondre

0

Si vous devez avoir plusieurs constructeurs, vous devez les nommer autrement que __construct, puis définir une méthode __construct pouvant accepter n'importe quel nombre d'arguments. Dans cette méthode, vous pouvez déterminer lequel de vos constructeurs personnalisés utiliser. Si tout ce que vous voulez faire est de permettre au constructeur à passer un tableau au lieu d'une liste d'arguments, vous pouvez le faire de cette façon (notez que cet exemple est dépourvu de toute vérification d'erreur):

public function __construct() { 
    $args = func_get_args(); 
    if(count($args) == 1 && is_array($args[0])) { 
     $cArgs = $args[0]; 
    } else { 
     $cArgs = $args; 
    } 

    __do_construct($cArgs[0], $cArgs[1]); 

} 

private function __do_construct($arg1, $arg2) { 
    // do something 
} 
+0

alors je suppose qu'il n'y a aucun moyen de le faire en dehors de la classe? – qrokodial

+0

Bien sûr, je suppose que vous essayez de le faire dans la classe. Vous pouvez le faire avec la réflexion. Voir [http://stackoverflow.com/questions/1569949/instantiating-a-new-php-class-with-one-or-many-arguments](http://stackoverflow.com/questions/1569949/instantiating-a -new-php-class-with-un-ou-plusieurs-arguments). –

1
class Test { 
    public function __construct(array $params) { 
     // ... 
    } 
} 

Ne pas utiliser « magique » à moins que vous vraiment besoin de ça.

EDIT:

Si ce que vous avez besoin est varagrs, vous pouvez trouver une réponse here.

+0

J'en ai besoin, je n'utilise évidemment pas cela sans raison. – qrokodial

Questions connexes