Search code examples
phpstatic-methodslate-binding

php: get the name of an inheriting class in a static method


Okay, the post title might be a little confusing.

I have this code:

class A {
    public static foo() {
        return get_called_class();
    }
}

class B extends A {

}

class C {
    public function bar() {
        echo B::foo();
    }
}

Output: C

WHat I want to get in foo() is the class name of B. How can I do this without changes in the class B?

Regards, Jan Oliver

PS: __ CLASS __, get_class() are not working.


Solution

  • Before PHP 5.3, this is not possible without hacks and is known as late static binding, a googleable term.

    If you're interested, here is the SO article with answers: Faking Late Static Binding before php 5.3