[PHP-DEV] static:: and PHP 7 (from bug #70997)

2015-11-30 Thread Peter Cowburn
Hi internals,

I'm looking for some feedback on a change with regard to static::, which
has been present throughout the 7 branch.

Have a look-see at https://bugs.php.net/bug.php?id=70997

test();

?>

In PHP 7 it dumps true, in PHP 5 false.

I'm looking for info on when, where, why it was introduced, and ultimately
some clarification of:
a) was this intentional
b) it is going to stay (i.e. "not a bug")
c) some more to go on so I can document the change clearly

If there is already a line in NEWS/UPGRADING or a commit you can point me
to, that would be amazing.

Whatever tangents this topic wanders off on, I'd like to eventually pull it
back to the bug report mentioned above with one eye on formulating the docs
changes (if it's really "not a bug").

Cheers,

A docs guy.


Re: [PHP-DEV] static:: and PHP 7 (from bug #70997)

2015-11-30 Thread Bob Weinand
> Am 30.11.2015 um 13:23 schrieb Andreas Heigl :
> 
> Am 30.11.15 um 13:18 schrieb Peter Cowburn:
>> class A {
>>>const TEST = false;
>>>public function test() {
>>>var_dump(static::TEST);
>>>}
>>> }
>>> 
>>> class B extends A {
>>>const TEST = true;
>>> 
>>>public function test() {
>>>A::test();
>>>}
>>> }
>>> 
>>> $b = new B;
>>> $b->test();
>>> 
> You are calling explicitly A::test().
> 
> When you call parent::test() everything works as you'd expect it.
> 
> Have a look at https://3v4l.org/RCrRd
> 
> Apart from that you are calling an instance-method as a static method by
> using A::test().
> 
> Cheers
> 
> Andreas

We do that, because we may not have any other choice, e.g. when calling a 
great-parents method. To then use LSB, we have to explicitly name our parent.
This is now not possible anymore, and hence I’d consider this as a BC break at 
least, if not a bug.

This definitely is not simply *not a bug*.

Bob