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
  • PriceTF141
    Modo hardware RGB
Membres en ligne
  • CMs4mvs
  • PriceTF141
  • svoglimacci
Derniers messages publiés
Statistiques globales
Discussions
865 353
Messages
8 057 247
Membres
1 575 870
Dernier membre
zephiaar
Partager cette page
Haut