Re: BC break in 5.3.2 -> 5.3.3 with "parent::" and __call/__callStatic
| From: | Giovanni Giacobbi | Date: | Sun, 24 Oct 2010 23:23:02 +0000 |
| Subject: | Re: BC break in 5.3.2 -> 5.3.3 with "parent::" and __call/__callStatic | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-49967@lists.php.net to get a copy of this message | ||
On Mon, Oct 25, 2010 at 01:04:00AM +0200, Etienne Kneuss wrote:
> On Oct 25 0:56:28, Etienne Kneuss wrote:
> > >
> > > I think you meant Bar to extend ActiveRecord? But anyway, I think
> > > that this particular call should be done through __call, not
> > > __callStatic, since it's basically non-static call. The line between
> > > the two wasn't really well-defined in PHP (you could call static
> > > methods non-statically and vice versa) which is a pity but I think
> > > distinction can be made in this case.
> >
> > Exactly, if Bar::getFoo is not called statically, parent::getFoo() will
> > not be a static call, it should not get through __callStatic.
> >
> > Best,
>
> Oh, and #51176 seems bogus to me. "::" is not sufficient to indicate a
> static call, neither is "self::", "static::", or "Foo::".
>
> A call is only static if one of the two following conditions match:
> 1) the target method is declared as static
> 2) the call comes from an object-less scope
>
I think you perfectly got the point. However, being actually non-defined, we need to choose between
__call() and __callStatic(), and i think that number 2 is the only applicable criteria.
Note that for my problem, reverting commit 295706 in branch PHP_5_3 is enough to fix my problem, but
it would break again 51176.
As this is a BC break compared to the 5.3.x series, IMHO it's the right way to go and then find
another solution for 51176.
--
Giovanni Giacobbi