Hi,

Sorry to bring that up again!

Quick summary for people that didn't follow it: LSB was implemented,
and it was decided that "explicit calls" ( ClassName::method() )
wouldn't pass the caller info if no fallbacks occured. Some people
that were looking forward to having LSB were disappointed as it meant
that it wouldn't be possible to sanely overwrite a static method,
without loosing info on the caller.

Quick POC:
class A { public static function test() { echo get_called_class(); }}
class B extends A { public static function test() { echo
get_called_class(); parent::test(); }
class C extends B;
C::test(); // will output CA

To be able to pass information, it was decided to implement a
call_user_func-like function that passed the caller info:
forward_static_call(_array).

Back then, I was for that solution, but with some time I realized that
it would probably be one of those decisions that would bite us back
afterward.

To sum up key points about each possibilities:

1) forward_static_call
+ no need to affect the engine
- slow, painful

2) parent:: carries the info while ParentClassName:: doesn't
+ convenient
+ no functionnality lost
- introduces a difference between parent:: and classname::, but
restricted to LSB so no BC break

It really seems like (2) is the most PHP way of doing things, while
(1) is more of a hack that we will regret later.
The only problem about (2) is that difference, but I really feel (and
experienced in the multiple help channels that I'm in) that people
already see (wrongly for now) classname:: and parent:: as slightly
different. So introducing it as of 5_3 wouldn't be too much of a
shock. The point is that: people who uses LSB will be aware of that
difference and will use parent:: vs classname:: carefully, while
others will be able to ignore it

So, I really would like to revert that foward_static_call stuff and
implement the parent:: patch instead, while it's still possible.

thoughts?

-- 
Etienne Kneuss
http://www.colder.ch

Men never do evil so completely and cheerfully as
when they do it from a religious conviction.
-- Pascal

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to