j'ai une classe abstraite et une classe étendue:PHP: dynamiquement obtenir le nom d'une classe qui étend la classe actuelle
abstract class MyAbstract {
public function getName(){echo static::class;}
}
class MyExtends extends MyAbstract {}
Je voudrais obtenir dynamiquement le nom d'une classe étendue lorsque getName()
est appelé:
$c = new MyExtends();
echo $c->getName(); // expect: "MyExtends"
Cela fonctionne bien sur PHP 5.6+ (demo), mais le projet sur lequel je travaille est limitée à PHP 5.3 et je ne l'effet de levier pour changer cela. Sur cette version, une erreur d'analyse syntaxique est jeté:
Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$'
Je modifié la fonction:
public function getName(){echo __CLASS__;}
Bien sûr, cela fait écho juste le nom du parent - MyAbstract
, il ne fonctionne pas . La seule chose à laquelle j'ai pensé est de surcharger getName()
avec une nouvelle implémentation dans chaque classe d'extension, mais cela ne va pas bien: tout le point de l'héritage est de concentrer la base de code commune dans un parent (et bien sûr la vraie fonction n'est pas un one-liner).
Toute idée comment je peux obtenir dynamiquement le nom de classe s'étendant du contexte de la classe mère abstraite en PHP 5.3?
Merci. oui cela fonctionne comme prévu. S'il vous plaît ajouter un lien vers les docs pour améliorer la réponse: http://php.net/manual/fr/function.get-class.php – BeetleJuice
@BeetleJuice - lien était disponible mais en allemand: P - changé en anglais. THX. –
Cool site (ideone.com); Je ne savais pas à ce sujet. – BeetleJuice