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 :

Problème d'instanciation d'objet [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 164
    Par défaut Problème d'instanciation d'objet
    Bonjour,

    J'ai un problème en php que j'arrive pas à résoudre.
    J'ai plusieurs classes (cl1.php, cl2.php,....).
    Dans mon index.php, je veux pouvoir instancier un objet ($obj) avec une des classe sus-citée en fonction d'un paramètre passé en GET.

    Une solution serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    $action = $_GET['action'];
    switch($action){
      case '1':
           $obj = new cl1();
           break;
      case '2':
           $obj = new cl2();
           break;
    }
    ?>
    Mais je ne veux pas car je souhaite que la création de $obj soit automatisée en fonction de $_GET['action'].
    C'est à dire faire un truc du type (dont la syntaxe n'est pas correcte, c'est juste pour l'exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $action = $_GET['action'];
    $obj = new $action.'()';
     
    ?>
    Par avance merci

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    c'est tout à fait faisable mais il va falloir que tu vérifies au préalable la définition de la classe que tu souhaites appeler via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $action = $_GET['action'];
    $obj = new $action();
    ?>
    Pour cela il faut regarder du côté de class_exists() et de get_declared_classes().
    Juste au cas où l'action pointerait vers une classe inexistante.
    (Ah penses aussi à regarder du côté de l'autoloading.)

  3. #3
    Membre confirmé

    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 164
    Par défaut
    ça marche impec.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'instanciation d'objet
    Par 1974k dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 27/12/2014, 17h58
  2. Réponses: 13
    Dernier message: 20/05/2011, 20h11
  3. [COM] Problème d'instanciation d'objet COM
    Par lpapouk dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/07/2008, 16h14
  4. Réponses: 7
    Dernier message: 18/07/2006, 13h23

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