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] Passer les arguments d'un objet par liste variable


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Points : 537
    Points
    537
    Par défaut [Tableaux] Passer les arguments d'un objet par liste variable
    Dans une procédure , je voudrais activer une classe, dont je ne connais pas par avance le nombre d'attributs en entrée,
    première idée (de bourrin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (sizeof($Arguments) == 1) $UneClasse = new $Classe($Arguments[0]);
    if (sizeof($Arguments) == 2) $UneClasse = new $Classe($Arguments[0],$Arguments[1]);
    ...
    ...
    if (sizeof($Arguments) == 5) $UneClasse = new $Classe($Arguments[0],$Arguments[1],$Arguments[2],$Arguments[3],$Arguments[4]);
    Mais je ne trouve ce type d'écriture pas très propre et risquée (si j'ai 40 arguments ...)

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Tu peux utiliser func_num_args( ) & cie http://www.php.net/func_num_args
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre confirmé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Points : 537
    Points
    537
    Par défaut Précisions utiles
    La classe appelée possède ce mécanisme pour récuperer les données dont elle ne connait pas nécessairement le nombre.
    Ici, le problème est inverse, c'est lors de l'appel que je ne connais pas la classe (parmi les classes que je développe ou dont j'ai les sources)
    et donc je ne peut transmettre un nombre précis d'arguments

  4. #4
    Membre du Club Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Points : 50
    Points
    50
    Par défaut
    Bonsoir,

    Pour ce genre de soucis, il est préférable que tu passes directement ton tableau $Arguments en paramètre de ta class.

    Bonne soirée.
    Etudiant L3 Informatique
    --
    Twitter | Blog | Website

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par a028762 Voir le message
    Ici, le problème est inverse, c'est lors de l'appel que je ne connais pas la classe (parmi les classes que je développe ou dont j'ai les sources) et donc je ne peut transmettre un nombre précis d'arguments
    Oups désolé, j'avais mal compris le pb

    Hum là il va falloir faire intervenir l'API Reflection http://www.php.net/reflection ou comme dit plus haut utiliser des tableaux.
    Avec Reflection :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
        class Test0 {
            public function __construct( ) {
                echo "Test0[]\r\n" ;
            }
        }
     
        class Test1 {
            public function __construct($a) {
                echo "Test1[$a]\r\n" ;
            }
        }
     
        class Test2 {
            public function __construct($a, $b) {
                echo "Test2[$a;$b]\r\n" ;
            }
        }
     
        header('Content-Type: text/plain') ;
     
        // Qques classes avec nbre d'args variable à instancier dynamiquement
        $classes = array(
            array('name' => 'Test0', 'arguments' => array( )),
            array('name' => 'Test1', 'arguments' => array(123)),
            array('name' => 'Test2', 'arguments' => array(123, 234))) ;
     
        foreach ( $classes as $class ) {
            $reflex = new ReflectionClass($class['name']) ;
            // Instanciation de $class['name'] avec les arguments
            $test = $reflex->newInstanceArgs($class['arguments']) ; // A partir de PHP 5.1.?
        }
    ?>
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Test0[]
    Test1[123]
    Test2[123;234]
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. Acceder a un objet par une variable
    Par Steve57 dans le forum Débuter
    Réponses: 6
    Dernier message: 17/06/2011, 17h01
  2. Axis, creation client, Je ne peut pas passer les arguments
    Par r_asmak dans le forum Services Web
    Réponses: 7
    Dernier message: 13/10/2008, 08h41
  3. [Tableaux] Regrouper les arguments avec str_replace
    Par Gunner4902 dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2008, 17h51
  4. Réponses: 4
    Dernier message: 19/01/2006, 14h34
  5. Comment passer les arguments à un script perl
    Par belgampaul dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2005, 12h52

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