Re: [PHP] Re: [PHP-DEV] How expensive are function_exists() calls?
On Thu, Mar 12, 2009 at 10:35 PM, Robert Cummings rob...@interjinn.com wrote: The only thing that should defeat the usefulness of a bytecode cache is the use of eval since the cache has no reference point upon which to determine if the eval'd code has been previously compiled and has changed since. I guess I considered something like call_user_func($some variables) was somewhat equivalent of an eval... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Re: [PHP-DEV] How expensive are function_exists() calls?
On Thu, 2009-03-12 at 21:55 -0700, mike wrote: For templating ideas ... Would bytecode caches (APC) be able to work properly with this: function print_something($args, $output = 'html') { switch($output) { 'iphone': print_something_iphone($args); break; default: print_something_html($args); break; } } or something like this: function print_something($args, $output = 'html') { if(function_exists('print_something_'.$output)) { call_user_func('print_something_'.$output); } } I thought we covered a question just like this a week ago... yes this will not pose a problem for a bytecode cache. Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Re: [PHP-DEV] How expensive are function_exists() calls?
On Thu, Mar 12, 2009 at 10:10 PM, Robert Cummings rob...@interjinn.com wrote: I thought we covered a question just like this a week ago... yes this will not pose a problem for a bytecode cache. Apologies. I saw an example of some OOP thing from internals before it moved to -general. So even using call_user_func() with dynamic functions won't break the usefulness of APC? -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Re: [PHP-DEV] How expensive are function_exists() calls?
On Thu, 2009-03-12 at 22:27 -0700, mike wrote: On Thu, Mar 12, 2009 at 10:10 PM, Robert Cummings rob...@interjinn.com wrote: I thought we covered a question just like this a week ago... yes this will not pose a problem for a bytecode cache. Apologies. I saw an example of some OOP thing from internals before it moved to -general. So even using call_user_func() with dynamic functions won't break the usefulness of APC? The only thing that should defeat the usefulness of a bytecode cache is the use of eval since the cache has no reference point upon which to determine if the eval'd code has been previously compiled and has changed since. Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Re: [PHP-DEV] How expensive are function_exists() calls?
On Wed, 2009-03-04 at 11:45 -0800, mike wrote: On Wed, Mar 4, 2009 at 4:01 AM, Jochem Maas joc...@iamjochem.com wrote: ..not an internals question me thinks ... redirecting to generals mailing list Actually, I do think it is somewhat internals related. I want to know from the internals/experts angle if this is a good function to be relying on, or if it is one of those things like the @ operator which I've been told is expensive and to me is one of those things to stay away from. Now if this breaks opcode caches like APC, I will have to find another way. Also - I write procedural, not OOP. So that won't help here. Would creating functions such as output_foo_html() output_foo_rss() output_foo_json() Then depending on the output, using something like this? Would this be breaking opcode caches as well then? if(function_exists('output_foo_'.$format)) { call_user_func('output_foo_'.$format); } else { output_foo_html(); } Perfectly fine. Shouldn't break an opcode cache. the opcode cache will store the opcodes to do what you've done above and also will store opcodes for the function wherever it was declared. Then when it runs off it will go. For what it's worth... functions have global scope... all functions are store in some kind of lookup table. Associative arrays have O( lg n ) lookup time. Let's imagine you had 1 million defined functions... We're talking at most 19 node traversals on a balanced binary tree (yes I know it's a hashing algorithm). A billion declared functions 29 steps. Is it fast? Yes. Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php