NYCPHP Meetup

NYPHP.org

[nycphp-talk] Working with recursive "single-referenced" methods and static variables

Matthew Terenzio webmaster at localnotion.com
Tue Feb 24 17:30:10 EST 2004


I had a similar problem once and never figured it out. I thought it was 
a deficiency in the object oriented aspects of PHP. Something that 
would be addressed in PHP 5.

On Feb 24, 2004, at 4:59 PM, Phil Powell wrote:

> [CODE]
> class DepartmentTree {
>
> function &buildTree($id) {
>   static $html;
>   if (!isset($html)) {
>    // DO STUFF HERE TO $html
>   }
>   // DO MORE STUFF
>   if ($condition_is_met) $this->buildTree($newID);
>   $this->html = $html;
>  }
>
> }
> [/CODE]
>
> The above (and greatly paraphrased from the 100-line actual class) 
> class and method, in its real form, totally works inasmuch as it 
> successfully always creates an HTML hierarchial tree of departments 
> mapped with child departments.  I have no problem with this.. as long 
> as I only use the class once.
>
> However, there is a case where I need the entire contents of the 
> departments table dumped out into a resultset, and to do that I 
> figured I would just loop through a query of records that have no 
> parent ID; each id in each row I seed into $tree->buildTree():
>
> [CODE]
> for ($i = 0; $i < @sizeof($result); $i++) {
> $tree->buildTree($result[$i]->id);
> $this->deptArray += $tree->convert_to_array();
> $tree->clearTreeHTML();
> }
> [/CODE]
>
> The "convert_to_array()" method will convert the contents of 
> $this->html from HTML content to an array, keeping the original 
> hierarchial order; the "clearTreeHTML()" method will set $this->html 
> to NULL or "".
>
> Problem is, it does not do that, because apparently "static $html" 
> keeps an instance of it running in the single-referenced instance of 
> "buildTree" method.
> Based on how best I can explain my problem, and sorry I can't explain 
> it any better w/o dumping the actual code line by line, how have you 
> all figured out the best way to generate multiple, unique instances 
> from a single-referenced method that uses a static local variable?
>
> Thanx
> Phil
>
> -- 
> Phil Powell
> Web Developer
>  ADNET Systems, Inc.
>  11260 Roger Bacon Drive, Suite 403
>  Reston, VA  20190-5203
> Phone: (703) 709-7218 x107   Cell: (571) 437-4430   FAX: (703) 709-7219
> EMail:  Phillip.Powell at adnet-sys.com      AOL IM: SOA Dude
>
>
>
>
> _______________________________________________
> talk mailing list
> talk at lists.nyphp.org
> http://lists.nyphp.org/mailman/listinfo/talk




More information about the talk mailing list