1 min read
Getting the subclass name in the parent class
A mistake that I keep making - I have a class that extends another class, and I need to know the class name of that subclass. However the function where I need the name is in the parent class. In this case the magic constant __CLASS__ won’t work, as it will return the name of the class where it is found. get_class() won’t work, too. Not without an important difference:
abstract class Foo { public function getClassName() { return \_\_CLASS\_\_; // or return get\_class(); }
public function getSubClassName() { return get\_class($this); // the reference $this is important here } }
class Bar extends Foo {};
$bar = new Bar();
echo '1. ' . $bar->getClassName(); echo '<br>'; echo '2. ' . $bar->getSubClassName();
This will result in
1. Foo
2. Bar
The first function call returns the (in my case) incorrect name of the parent class, while the 2nd function works as I need it.