IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Construction d'objet avec un tableau de paramètres


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut [Tableaux] Construction d'objet avec un tableau de paramètres
    Bonjour.

    Est-il possible de construire un nouvel objet (normalement construit par new) à partir d'une liste de paramètres récupérés, par exemple sous forme de tableau. Autrement dit, peut on étendre la fonction call_user_func_array à la construction des objets ?


    Blustuff.

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je ne suis pas certain de bien saisir la question. Ne peux-tu pas définir un constructeur qui accepte un Array en paramètre ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    La classe de l'objet à construire est inconnue au parsage du script. De plus il ne serait pas logique d'un point de vue objet de construire tous les objets avec un unique paramètre tableau...

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ah, je situe la question.
    Tu as mis le doigt dessus : ce ne serait pas très "objet". Il y a toujours une possibilité avec eval() si tu y tiens vraiment...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Non, je ne tiens pas à utiliser eval. (C'est la solution que j'utilise actuellement)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    peut-être en utilisant les propriétés dynamiques de php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php
     
    class Un
    {
        public function __construct() {
            echo 'Un:<br>';    
        }
    }
     
    class Deux
    {
        public function __construct() {
            echo 'Deux<br>';       
        }
    }
     
    $tab=array('Un','Deux');
    foreach ($tab as $obj) {
    	$ins=new $obj();
    }
     
    ?>

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est ce que j'allais proposer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    class Test{
        public function __construct(){
            echo 'Constructeur<br />';
        }
    }
     
    $class = 'Test';
     
    new $class();
     
    ?>

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ca c'est pour "objet de type dynamique" pas pour construire l'objet avec une liste de paramètres variable (même le nombre de paramètres est variable) et inconnue au moment de l'analyse syntaxique.

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    D'accord, tu souhaites surcharger le constructeur. Il ne me semble pas que PHP le supporte pour le moment.

    [Edit] Peut-être avec call_user_method_array().

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Non, je ne souhaite pas surcharger le constructeur.

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Excuse-moi, je croyais que tu voulais avoir une classe que tu puisses appeler avec un nombre variable de paramètres. Cela ressemble beaucoup à de la surcharge de constructeur, selon mon vocabulaire.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ca peut être ce qu'on appelle "paramètres par défaut".

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Voici ce que tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
     
    class Test{
        function __construct($var_1 = 0, $var_2 = 0){
            if(!empty($var_2)){
                echo 'Constructeur 3<br />';
            }
            elseif(!empty($var_1)){
                echo 'Constructeur 2<br />';
            }
            else{
                echo 'Constructeur 1<br />';
            }
        }
    }
     
    $class = 'Test';
     
    new $class();
    new $class(1);
    new $class(1, 2);
     
    ?>

    [Edit] Simple curiosité : si tu as la réponse, pourquoi avoir demandé de l'aide ?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    moi je suis curieux de voir le code de Blustuff avec eval ^^

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Je n'ai toujours pas ma réponse : Je ne sais toujours pas comment créer un objet à partir d'un tableau d'arguments pour le constructeur.

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Pour ma part, je ne sais toujours pas ce que tu veux.
    Tu me dis que tu ne connais pas le nom de la classe au moment de parser le script : je te propose un nom dynamique, tu n'en veux pas.
    Tu me dis que tu ne connais pas le nombre de paramètres : je te propose une solution avec Array, tu me dis que ce n'est pas "objet" ; je te propose une solution avec des paramètres par défaut, tu me dis que ce n'est pas un Array...

    Je te propose quoi, maintenant ?


    [Edit] Si tu me faisais une réponse de plus de 2 lignes, nous avancerions peut-être plus rapidement...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Non, quand je dis que je ne veux pas de la solution c'est qu'elle ne marche pas. Mes constructeurs ont éffectivement des paramètres par défaut, ce n'est pas une question, ce n'est pas un choix métaphysique, c'est une nécessité.

    Je vais être un peu plus imagé. Vous avez à un moment donné dans un script un tableau de paramètres et un nom de classe à instancier. Vous ne vous occupez pas de savoir comment ce tableau a été construit. Vous devez construire un objet du type donné avec les paramètres donnés. Vous faites comment ?

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    >moi je suis curieux de voir le code de Blustuff avec eval ^^

    ...

    tant pis alors, je vous laisse

  19. #19
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Tu sembles chercher un équivalent pour each() qui sache retourner les variables. Cela n'existe pas à ma connaissance.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Pourquoi each ?

Discussions similaires

  1. Tableaux de tableaux dans un objet avec random
    Par badibad dans le forum Langage
    Réponses: 1
    Dernier message: 23/06/2013, 14h21
  2. pb d'invoke de methode avec un tableau d'objets en parametre
    Par sebastien2222 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 27/09/2006, 10h33
  3. Réponses: 9
    Dernier message: 15/09/2006, 19h08
  4. Réponses: 3
    Dernier message: 04/08/2006, 19h24
  5. un problème avec un tableau d'objet, erreur bete ?
    Par Heero_2040 dans le forum C++
    Réponses: 12
    Dernier message: 13/07/2006, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo