Getting the subclass name in the parent class
This blog post is older than 4 years and may no longer be valid.
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.