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 :

Qui a créé l'objet ? [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 542
    Par défaut Qui a créé l'objet ?
    Bonjour,

    Un petit dev en PHP dont je suis loin d'être un habitué m'amène ici pour une petite question.
    Je crée une classe Client.
    J'ai besoin de bloquer la création directe d''instance de cette classe .
    Une seconde classe ClientManager seule doit servir de factory et pouvoir créer une instance de Client.
    Écrire la fonction qui crée l'instance dans ClientManager, pas de problème.
    Ce que j'imaginais, c'est de mettre une instruction dans le construct de Client pour savoir "QUI" a déclenché le construct.
    Un genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( get_class(laclassequimaappele) != 'ClientManager' ) {
      echo "vas voir ailleurs";
    }
    Est-ce que ce genre de chose est possible ?

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 994
    Par défaut
    Si une instance de ta classe ClientManager n'a besoin que d'une instance de ta classe Client, tu peux très bien utiliser l'héritage et utiliser get-called-class() dans Client.

    Tu peux aussi définir la classe Client comme abstraite pour éviter qu'elle ne soit instanciée.

    Une autre possibilité est d'utiliser debug_backtrace() au sein du constructeur de Client. Un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $deb = debug_backtrace();
    if (count($deb) === 2 && $deb[1]['class'] === 'ClientManager') {
        // do something
    }

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 542
    Par défaut
    Pour l'héritage, dans le contexte, ce n'est pas possible.
    Merci pour l'idée du debug_trace très intéressante.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/04/2010, 17h49
  2. Segmentation d'images qui contiennent un seul objet
    Par bilzzbenzbilz dans le forum Traitement d'images
    Réponses: 15
    Dernier message: 09/03/2009, 04h36
  3. fonction qui renvoie un un objet d'une autre classe
    Par miloon dans le forum Débuter
    Réponses: 3
    Dernier message: 16/02/2009, 21h45
  4. [j3d] afficher une ligne qui point vers un objet
    Par guitalca dans le forum 3D
    Réponses: 1
    Dernier message: 06/03/2006, 22h44

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