2009-02-11 5 views
1

Supposons que je construis une classe de base qui sera étendue par la classe des enfants. Ainsi, une classe de base est appelée Base et les enfants peuvent être Child1, Child2, etc.Obtenir le nom d'une classe enfant en PHP

Dans le constructeur de la classe de base, comment puis-je obtenir la valeur de Enfant1/Enfant2?

C'est tout en utilisant PHP

Répondre

10

Une classe de base devrait dépendre vraiment jamais des informations sur les classes d'enfants ---

Pour répondre à votre question:

class base { 
    public function __construct() { 
     print "Class:" . get_class($this) . "\n"; 
    } 
} 

class child extends base{ 
    public function __construct() { 
     parent::__construct(); 
    } 
} 
$c = new child(); 

Juste pour référence ultérieure - - ceci peut être réalisé dans un contexte statique en utilisant get_called_class(), mais ceci n'est disponible qu'en PHP> = 5.3

+1

Je sais que c'est un peu vieux, mais je pense que je mentionnerais que cela fonctionne pour moi en PHP 5.2.17 – Trey

+0

"Une classe de base ne devrait jamais vraiment dépendre des informations sur les classes enfants" - qu'en est-il des classes abstraites? Cela peut me servir dans certains cas où vous devez acheminer des choses. – TCB13

0

Edit: Je ne savais pas get_class, ne pas tenir compte celui-ci;)

Vous pouvez essayer __CLASS__ mais il pourrait ne pas fonctionner correctement. Une solution de rechange pourrait consister à spécifier le nom de la classe en tant que propriété de la classe de base.

Edit: Cela ne fonctionne pas (je le code suivant) construct() { __CLASS écho; } }

class b extends a {} 

$b = new b; 

je suggère passer le nom de $ b en tant que paramètre à A, par exemple:

<?php 
class a { 
    protected $name; 
    public function __construct() { 
     echo $this->name; 
    } 
} 

class b extends a { 
    protected $name = __CLASS__; 
} 

$b = new b; 
10

simplement appeler get_class ($ this-) - À noter cependant qu'une classe de base La méthode n'a pas vraiment d'intérêt à changer son comportement en fonction de la classe dérivée qui l'utilise. C'est le point entier de dériver une classe :)

+1

Si vous essayez d'implémenter un framework MVC très simple, avoir le nom de la classe enfant pour trouver une vue est très utile. – sinni800

Questions connexes