Re: [PHP-DEV] Re: static:: and PHP 7 (from bug #70997)
Hey: > On Nov 30, 2015, at 22:48, Rowan Collinswrote: > > Andreas Heigl wrote on 30/11/2015 12:23: >>> 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(). > > This appears to be the crucial thing: if you declare the test() method as > static in both classes, it returns false in all versions: > https://3v4l.org/hJoor > > It's almost like A::test() is now interpreted as a static call, rather than a > "scope resolution" of the instance method, but $this is still available, so > it's not quite as simple as that: https://3v4l.org/qbT3j > dmitry has committed a fix, please have a look Thanks > Regards, > -- > Rowan Collins > [IMSoP] > > > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] Re: static:: and PHP 7 (from bug #70997)
On 30 November 2015 at 12:16, Peter Cowburnwrote: > 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 > > > 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(); > > ?> > > In PHP 7 it dumps true, in PHP 5 false. > Gah, this was inevitable! In PHP 7 it dumps FALSE, in PHP 5 TRUE. Stupid brain. > > 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] Re: static:: and PHP 7 (from bug #70997)
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 -- ,,, (o o) +-ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andr...@heigl.org N 50°22'59.5" E 08°23'58" | | http://andreas.heigl.org http://hei.gl/wiFKy7 | +-+ | http://hei.gl/root-ca | +-+ smime.p7s Description: S/MIME Cryptographic Signature
Re: [PHP-DEV] Re: static:: and PHP 7 (from bug #70997)
Andreas Heigl wrote on 30/11/2015 12:23: 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(). This appears to be the crucial thing: if you declare the test() method as static in both classes, it returns false in all versions: https://3v4l.org/hJoor It's almost like A::test() is now interpreted as a static call, rather than a "scope resolution" of the instance method, but $this is still available, so it's not quite as simple as that: https://3v4l.org/qbT3j Regards, -- Rowan Collins [IMSoP] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php