Hi Michael, Good catch. You can get the behavior that you expect by enabling (#ifdef ZEND_LSB2) in my patch. Tests lsb_018.phpt and lsb_019.phpt are especially for this behavior.
I am not sure which behavior shouldbe in final patch. It seems like support for inheritance provides more flixebility, but makes concept harder to understand. Thanks. Dmitry. > -----Original Message----- > From: Michael Lively [mailto:[EMAIL PROTECTED] > Sent: Wednesday, September 19, 2007 8:34 AM > To: Dmitry Stogov; 'Etienne Kneuss' > Cc: internals@lists.php.net; Stanislav Malyshev; Andi Gutmans > Subject: Re: [PHP-DEV] [patch] Late static bindings (LSB) > > > There is a serious problem with both of these patches as they are now. > > I understand the principal behind > <? > > class A { > static public function test() { echo get_called_class() } > } > > class B extend A { > static public function test2() { A::test(); } > } > > B::test2() > > ?> > > Returning 'A'. But I don't think that it is wise making this > change without > providing a way to still allow LSB to work further down an > inheritance > structure. > > The whole purpose behind late static binding is to offer > greater flexibility > when dealing with inheritance of static functions. I > understand that the > aspect of the original patch returning 'B' for the code above > is incorrect. > However, consider the following scenario. > > <?php > > class A { > static public function test() { > echo get_called_class()."\n"; > } > } > > class B { > static public function test() { > // Performing additional needed tasks. > parent::test(); > } > } > > ?> > > In class B it is impossible to perform additional work in > ::test() and allow > class A to still do it's work while still being able to > identify the class > that originated the set of calls. I don't think it can be > denied that this > is incredibly inflexible and is somewhat against the reason > for introducing > late static binding. > > I think it is important that a solution is found to this > problem, whether it > is allowing parent:: to forward on the 'called class' or > introducing a new > keyword:: that will forward on the 'called class'. > > Also, just as a somewhat obvious side note I think the > ability to do what I > have mentioned will be expected by the OO programmers (which > is who lsb is > for): > <?php > > class A > { > public function test() > { > echo get_class($this); > } > } > > class B extends A > { > public function test() > { > // Performing additional needed tasks. > parent::test(); > } > } > > $b = new B(); > $b->test(); > ?> > > Returns 'B' with no problem > > > ----- Original Message ----- > From: "Dmitry Stogov" <[EMAIL PROTECTED]> > To: "'Etienne Kneuss'" <[EMAIL PROTECTED]> > Cc: <internals@lists.php.net>; "Stanislav Malyshev" > <[EMAIL PROTECTED]>; "Andi > Gutmans" <[EMAIL PROTECTED]> > Sent: Tuesday, September 18, 2007 5:59 AM > Subject: RE: [PHP-DEV] [patch] Late static bindings (LSB) > > > Hi Etienne, > > At first thank you for catching the issue. > > I deside not to delay review of your patch and found only one > serious bug. It doesn't handle nested calls (test > lsb_017.phpt in my patch). > > --TEST-- > ZE2 nested calls > --FILE-- > <?php > class A { > public static function test($x=null) { > if (!is_null($x)) { > echo "$x\n"; > } > return get_caller_class(); > } > } > > class B extends A { > } > class C extends A { > } > class D extends A { > } > > echo A::test(B::test(C::test(D::test())))."\n"; > ?> > ==DONE== > --EXPECT-- > D > C > B > A > ==DONE== > > Your patch outputs 4 D. > > BTW I like other aspects of your patch. > I think your get_called_class() is better than my > get_caller_class(). (I changed this in my new patch). > > I also made the same behavior that you maintained in private > email. I didn't removed the corresponding code yet but > wrapped it with #ifdef ZEND_LSB2. (tests lsb_018.phpt and > test_019.phpt must be failed without it). > > I also made several optimizations. > > The latest version of my patch is attached. > I think if you fix the bug that I maintained before our > patches will near identical. BTW may be your patch will be > better, so please make a mixture of our patches. I assume > they have exactly the same behavior, so we need the fastest one. > > Thanks. Dmitry. > > > -----Original Message----- > > From: Etienne Kneuss [mailto:[EMAIL PROTECTED] > > Sent: Sunday, September 16, 2007 8:18 PM > > To: Dmitry Stogov > > Cc: internals@lists.php.net > > Subject: Re: [PHP-DEV] [patch] Late static bindings (LSB) > > > > > > Hello, > > > > I made the update anyway as it looked like it wouldn't take > much time. > > > > Attached is a updated version of my patch, along with all the tests > > related to it: > > > http://patches.colder.ch/Zend/late_static_bindings_take7.patch?markup > > > > -- > > 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 > > > -------------------------------------------------------------- > ------------------ > > > No virus found in this incoming message. > Checked by AVG Free Edition. > Version: 7.5.487 / Virus Database: 269.13.21/1010 - Release > Date: 9/15/2007 > 7:54 PM > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php