Hello Dmitry, i guess there was enough discussion on the name and we do not want to create another solwdown or BC by adding either slow string comparisions or a new keyword. Anyway how can this affect ZTS version? We are working on copies here as far as i know. And the information is touched at runtime anyway since we are doing inheritance at runtime. The way out would be to push the neccessary info on the stack which would be a big argument against supporting late binding because that would be a major slowdown for php everywhere and not only affect static method invocation.
best regards marcus Wednesday, March 1, 2006, 1:59:01 PM, you wrote: > I didn't look into the patch deep. > But I see one critical issue: > Patched PHP will modify zend_function->caller_scope at runtime. > This can break ZTS version and probaby opcode caches. > Storing runtime information in zend_function is bad decision. > Also the name "static" confusing me. > Because "self" behave more 'static' (and proper). > Thanks. Dmitry. >> -----Original Message----- >> From: Marcus Boerger [mailto:[EMAIL PROTECTED] >> Sent: Wednesday, March 01, 2006 3:03 PM >> To: Dmitry Stogov >> Cc: 'PHP-DEV'; 'Mike Lively' >> Subject: Re: [PHP-DEV] [PATCH] Late Static Binding >> >> >> Hello Dmitry, >> >> of course, what hinders you? >> See original mail from Mike: http://news.php.net/php.internals/21991 >> >> regards >> marcus >> >> Wednesday, March 1, 2006, 12:51:51 PM, you wrote: >> >> > Can I look into patch? >> >> > Dmitry. >> >> >> -----Original Message----- >> >> From: Marcus Boerger [mailto:[EMAIL PROTECTED] >> >> Sent: Wednesday, March 01, 2006 1:01 PM >> >> To: PHP-DEV >> >> Cc: Andi Gutmans; Mike Lively >> >> Subject: Re: [PHP-DEV] [PATCH] Late Static Binding >> >> >> >> >> >> Hello internals, >> >> >> >> it looks like either nobody objects or nobody has >> >> interest. Either way i tested the patch and worked helped it >> >> a bit and it looks good, doesn't affect anything else and >> >> doesn't show a single problem in valgrind. So If noone >> >> objects i will commit this next week. >> >> >> >> regards >> >> marcus >> >> >> >> special mail to andi :-) >> >> >> >> >> >> Thursday, February 23, 2006, 11:06:02 PM, you wrote: >> >> >> >> > I have finished a patch that implements a working version of late >> >> > static binding. >> >> >> >> > I used the notes from the Paris PDM as my guidelines for >> >> > implementation. >> >> > >> >> (http://www.php.net/~derick/meeting-notes.html#late-static-bin >> > ding-using-this-without-or-perhaps-with-a-different-name) >> >> > As requested in the notes I reused 'static::'. I also wrote >> >> a few tests >> >> > not only to test the new functionality but also to make >> >> sure 'static' can't be inherited or extended. >> >> >> >> > I also added a new function get_caller_class() which >> >> returns the name >> >> > of the class that static:: would represent. >> >> >> >> > (borrowing from PDM notes) >> >> > In php5.* the following script outputs "A::static2": >> >> >> >> > <?php >> >> > class A { >> >> > static function staticA() { >> >> > self::static2(); >> >> > } >> >> >> >> > static function static2() { >> >> > echo "A::static2\n"; >> >> > } >> >> > } >> >> >> >> > class B extends A { >> >> > static function static2() { >> >> > echo "B::static2\n"; >> >> > } >> >> > } >> >> >> >> > B::staticA(); >> >> ?>> >> >> >> >> > This has somewhat recently been highlighted by different >> >> developers to >> >> > be somewhat problematic behavior in creating user >> friendly APIs. If >> >> > you want to see a possible use for it you need look no >> further than >> >> > the example ZActiveRecord API that was used in their >> webcast with >> >> > php|arch. >> >> > >> >> (http://blog.joshuaeichorn.com/archives/2006/01/09/zactivereco >> >> rd-cant-work/) >> >> > Currently the code laid out there is impossible short of >> >> some ugly use of >> >> > debug_backtrace() and file parsing :/. This patch of course >> >> would allow that kind of code too exist. >> >> >> >> > In a small example based on the one I gave earlier you >> could change >> >> > the code too the following and have it print "B::static2": >> >> >> >> > <?php >> >> > class A { >> >> > static function staticA() { >> >> > static::static2(); >> >> > } >> >> >> >> > static function static2() { >> >> > echo "A::static2\n"; >> >> > } >> >> > } >> >> >> >> > class B extends A { >> >> > static function static2() { >> >> > echo "B::static2\n"; >> >> > } >> >> > } >> >> >> >> > B::staticA(); >> >> ?>> >> >> >> >> > As far as current userland code impact, there is very >> >> little as far as >> >> > I can tell. No keywords have been added, just another use for an >> >> > existing one. No changes were made to self:: or parent:: so >> >> the change >> >> > should be pretty transparent. The only thing that I see remotely >> >> > causing any issues would be the new function >> >> (get_caller_class().) I >> >> > added that just to complete the set so to speak. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php