Re: BC break in 5.3.2 -> 5.3.3 with "parent::" and __call/__callStatic

From: 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

« previous php.internals (#49967) next »