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/

Reply via email to