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 :

[POO] Obtenir le nom de la classe actuelle


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut [POO] Obtenir le nom de la classe actuelle
    Bonjour,

    J'ai deux classes A et B, B hérite de A.
    Je voudrais grâce à une méthode static déclarer dans A pouvoir récupérer le nom de la classe actuelle.

    J'ai essayé avec le code suivant :

    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
    <?php
    class A
    {
        static function get_name()
        {
           return __CLASS__;
        }
    }
     
    class B extends A
    {
     
    }
     
    echo B::get_name()
    ?>
    Mais ça m'affiche A !!

    Comment faire pour récupérer le nom de la classe avec laquelle est appellée la méthode static get_name() ?

  2. #2
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    en static je vois pas. sinon essaye

  3. #3
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    Et c'est bien ça mon problème...

    Avec $this un objet doit être instancié, ce que je ne veux pas.

    J'ai vue qu'il y avait un mot clé pour la classe actuelle qui est 'self'. Mais apparemment il sert uniquement à l'appel de méthode:
    Des idées?

  4. #4
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    si ton objet n'est pas instancié, je ne vois pas du tout comment php pourrais faire pour savoir de quel type il est.

  5. #5
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    si ton objet n'est pas instancié, je ne vois pas du tout comment php pourrais faire pour savoir de quel type il est.
    Exactement, mais je n'ai pas d'objet instanciés.
    Je veux savoir quelle classe fait appel à la méthode get_name().

    Par exemple :

    J'attends comme résultat 'B'. et non 'A' (comme dans mon exemple en haut).

    Je cherche une fonction qui m'indique le nom de la classe actuelle. Comme la variable magique __CLASS__ mais qui fonctionne aussi dans les classes dérivées.

  6. #6
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Comment faire pour récupérer le nom de la classe avec laquelle est appellée la méthode static get_name() ?
    Ca n'est pas possible actuellement. C'est une propriété qui fait débat dans la communauté des développeurs du core.

    Cependant, il existe un 'hack' reposant sur la fonction debug_backtrace. Voilà ce que ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class A {
      public static function get_name() {
        $t = debug_backtrace();
        $n = file($t[0]['file']);
        $l = $n[$t[0]['line'] - 1];
        preg_match('/[a-z_][a-z0-9_]*(?=::'.$t[0]['function'].')/i', $l, $m);
        return $m[0];
      }
    }
    class B extends A { }
    class C extends B { }
     
    echo B::get_name(); // B
    echo C::get_name(); // C
    Lis aussi ces très bons cours et tutoriels programmation PHP : http://php.developpez.com/cours/

Discussions similaires

  1. obtenir le nom de la classe dans une méthode static
    Par einboubou dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 13/11/2009, 17h46
  2. obtenir le nom de la classe
    Par robert_trudel dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 29/05/2008, 10h37
  3. [POO] Récupérer le nom de la classe d'un objet
    Par boux2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2007, 10h13
  4. Obtenir le nom d'une classe
    Par yapatchs dans le forum Langage
    Réponses: 10
    Dernier message: 26/09/2006, 12h37
  5. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 14h44

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