PHP : Paramètres d'une fonction vers une instance

  • Auteur de la discussion mdjdenormandie
  • Date de début

mdjdenormandie

Habitué
#1
Bonjour tout le monde sa fait un bout de temps ^^,
(a un tel point que mon ancien compte ne semble plus fonctionner ... bref)
voila je bosse sur une fonction PHP ou je doit passer les paramètres en entré de la fonction dans l’instanciation d'un objet, jusque là rien de complexe. sauf que cette méthode se veux être généraliste et donc :
la classe a instancier n'est quasiment jamais la même et le nombre de paramètres en entré est complétement arbitraire (variant de zéro a une dizaine pour les grosses classe voir potentiellement plus)
actuellement voila un extrait de mon code :

PHP:
    public function maFonction() { // paramètres libres
        $class = $this->get_class();
        /*...*/
        $this->_objects[$class] = new $class(func_get_args()); // instanciation
        /*...*/
        return $this->_objects[$class];
    }
Comme vous pouvez le voir je récupère les paramètres avec func_get_args() mais cette fonction retourne le tableau des paramètres et pas les paramètres les uns après les autres comme je le voudrais.

PHP:
//pour visualiser,
//se que sa fait:
maFonction($arg0, $arg1, $arg2, ...){
    return new maClass( array($arg0, $arg1, $arg2, ...) );
}

//se que j'aimerais que sa fasse :
maFonction($arg0, $arg1, $arg2, ...){
    return new maClass( $arg0, $arg1, $arg2, ...);
}
J'ai essayer d'utiliser call_user_func_array() (mais sa marche pas pour les instances)
et l'API Reflection (que je maitrise peu).

J'ai aussi essaye les conditions ternaire dans les parenthèses de l'instanciation
mais si la ternaire retourne false ou null elle peuvent rentrer un interaction/conflit avec les paramètres facultatives de certaines classes tiers. en plus sa fait beaucoup trop de ternaire ...

J'ai aussi essayé avec :
PHP:
maFonction(...$args){ // PHP 7
    return new maClass($args) );
}
Mais $args devient également un tableau et j'aimerais garder la compatibilité PHP 5.6 si possible.

une idée ?
Merci par avance
 

mdjdenormandie

Habitué
#2
C'est bon j'ai trouvé la solution dans l'API Reflection !
Pour ceux que sa intéressent :
PHP:
(new ReflectionMethod($class, "__construct"))->invokeArgs($ins = new $class(), func_get_args());
$this->_objects[$class] = $ins;
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Staff en ligne
  • drul
    Obscur pro du hardware
  • MagicVitalic
    Modérateur
  • Dreamcaster
    Gant de l'Infini. Super-admin.
Membres en ligne
  • Mirguy23
  • drul
  • MagicVitalic
  • Dreamcaster
Derniers messages publiés
Statistiques globales
Discussions
864 179
Messages
8 045 492
Membres
1 574 688
Dernier membre
Beline52290
Partager cette page
Haut