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

Reply via email to