Re: parent:: forwarding
| From: | Dmitry Stogov | Date: | Wed, 09 Jul 2008 07:32:00 +0000 |
| Subject: | Re: parent:: forwarding | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-38865@lists.php.net to get a copy of this message | ||
Hi Stas,
Note that called_scope is passed only to static methods of __parent__
class. I cannot imagine the use-case with intersecting LSBs in the same
class hierarchy. Could you please write the example.
Thanks. Dmitry.
Stanislav Malyshev wrote:
> Hi!
>
>> Each call to static method of parent class (it doesn't mater if it was
>> done using parent:: or something else) assumes forwarding of called
>> context.
>
> That would make it impossible to do non-forwarding call. Which means you
> can't use something like ActiveRecord pattern (which uses LSB) inside
> the context of another method that uses LSB too. I.e. if you got the
> called_scope set once, you are stuck with it forever until the topmost
> call ends, and you can not make another (new) LSB call inside that method.
> I don't think it is a good idea. It would lead to massive WTFs when you
> have code that perfectly working in unit tests (when you call it
> independently without called_scope pre-set) but breaks as soon as you
> call it with called_scope set (since all static calls like Foo::bar()
> would instantly start forwarding pre-set called_scope instead of
> creating a new one).
> If this is the way it would work, I'd recommend never using this feature
> - you just can't know what your "Foo::" would produce anymore, since the
> start of the call chain can be anywhere and there's no method to ensure
> you get the actual class that you used in the call. Which as far as I
> remember was the whole point behind LSB, but somehow it is lost now.