Recursive "single-referenced" methods and static variables

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Phil Powell

    Recursive "single-referenced" methods and static variables

    [PHP]
    class DepartmentTree {

    function &buildTree($ id) {
    static $html;
    if (!isset($html)) {
    // DO STUFF HERE TO $html
    }
    // DO MORE STUFF
    if ($condition_is_ met) $this->buildTree($new ID);
    $this->html = $html;
    }

    }
    [/PHP]

    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():

    [PHP]
    for ($i = 0; $i < @sizeof($result ); $i++) {
    $tree->buildTree($res ult[$i]->id);
    $this->deptArray += $tree->convert_to_arr ay();
    $tree->clearTreeHTML( );
    }
    [/PHP]

    The "convert_to_arr ay()" 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
Working...