This question already has an answer here:
I have an abstract class and an extending class:
abstract class MyAbstract {
public function getName(){echo static::class;}
}
class MyExtends extends MyAbstract {}
I would like to dynamically get the name of any extending class when getName()
is called:
$c = new MyExtends();
echo $c->getName(); // expect: "MyExtends"
This works well on PHP 5.6+ (demo), but the project I'm working on is limited to PHP 5.3 and I have no leverage to change that. On that version, a parse error is thrown:
Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$'
So I modified the function to:
public function getName(){echo __CLASS__;}
Of course, this just echoes the parent name -- MyAbstract
, so it doesn't work. Only thing I've thought of is to override getName()
with a new implementation in each extending class, but that doesn't scale well: the whole point of inheritance is to concentrate common codebase in a parent (and of course the real function is not a one-liner).
Any idea how I can dynamically get the extending class name from the context of the abstract parent class in PHP 5.3?
</div>
You can use get_class
to get the name of class:
<?php
abstract class MyAbstract
{
public function getName()
{
echo get_class($this);
}
}
class MyExtends extends MyAbstract
{
}
$c = new MyExtends();
echo $c->getName(); // expect: "MyExtends"
The above code should work on all versions (since 5.0.4).
Maybe:
public function getName(){get_class($this);}
Haven't tested it though.