Re: [PHP] Recursion... Sort of...

[email protected] (Jim Lucas)
Newsgroups php.general
Message-ID <[email protected]>
Nathan Nobbe wrote:
> On Thu, May 8, 2008 at 3:48 PM, Matt Neimeyer <[email protected]> wrote:
> 
>> Is there a way to tell if a function has been called that has resulted
>> in a call to the same function?
>>
>> We have an in-house CRM app that has a function that draws a tabbed
>> panel on a screen... BUT if there are sub-sub-tabbed panels we want to
>> invert the tab colors and panel colors...
>>
>> So...
>>
>> DrawSubTab($Set) - Black on White
>>   Content
>>   DrawSubTab($Set) - White on Black
>>      Content
>>      DrawSubTab($Set) - Black on White
>>         Content
>>      DrawSubTab($Set) - Black on White
>>         Content
>>         Etc...
>>
>> I suppose I could rewrite EVERY call to the function with a recursion
>> count like DrawSubTab($Set,$DepthCount+1) but that would be a MASSIVE
>> commit... whereas if the function can determine itself... All that
>> said I can't think of a good way to do it without a bastardized global
>> variable that track "how deep" we are and there is something that
>> bothers me about that approach... Unless that really is the easiest
>> way.
> 
> 
> you dont need a global, you can have a variable that persists throughout the
> request local only to the function itself using the static keyword.
> 
> function doStuff() {
>   static $callCount;
> 
>   if(!isset($callCount))
>    $callCount = 1;
>   else
>     $callCount++;
> 
>   /// do stuff w/ $callCount to potentially handle sub-tabs and stuff
> 
>   $callCount--;
> }
> 
> -nathan
> 

Look at the way he wants it to work.  Your way would change alternate the color 
each time the function is called.  I think the best/easiest way to keep track of 
depth will be by passing a variable in the function call itself.

-- 
Jim Lucas

    "Some men are born to greatness, some achieve greatness,
        and some have greatness thrust upon them."

Twelfth Night, Act II, Scene V
     by William Shakespeare
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.