views:

60

answers:

2

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.

+2  A: 

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: http://stackoverflow.com/questions/890505/faking-late-static-binding-before-php-5-3

Mike Sherov
I read the docs of php, but I didn't find a solution for my problem, for I don't want to change the B class.
janoliver
As I mentioned, if you're using php lower than 5.3 it's not possible without the hacks I provided: http://stackoverflow.com/questions/890505/faking-late-static-binding-before-php-5-3/1554813#1554813
Mike Sherov
A: 

I think you could use the built-in Reflection class for that.

Sarfraz