oh… I guess I see it somehow the third way class A { function foo() { return get_called_class(); } }
class B extends A { function bar1() { return self::foo(); // it is called using inheritance-rules } function bar2() { return A::foo(); // it is called directly! } } echo B::bar1(); // "B" echo B::bar2(); // "A" On 9/19/07, Dmitry Stogov <[EMAIL PROTECTED]> wrote: > So to clarify the question... > > <?php > class A { > function foo() { > return get_called_class(); > } > } > class B extends A { > function bar() { > return A::foo(); > } > } > class C extensa A { > function bar() { > return B::bar(); > } > } > echo B::foo(); // this must return "B". This is not a question, the question > is in the following two lines... > echo B::bar(); // this must return "B", because B::bar() calls to A::foo() > and A is parent of B, so "late static binding" still the same > echo C::bar(); // this must return "B" too, because C:bar() calls to > B::bar(), but B is not the parent of C, so the call to B::bar() is handled > in the same way as in the previous line. > ?> > > Is this the expected behavior? (I would prefer it. My previous patches > worked in this way). > > Or may be both lines must return "A"? (like Etienne's patches do, and like > my latest path does) > > Thanks. Dmitry. -- Alexey Zakhlestin http://blog.milkfarmsoft.com/