此代码是否创建该函数的多个实例?


Does this code create multiple instances of the function?

我正在学习如何建立一个父/子类别列表。我找到了一个很棒的教程,并实现了以下代码:

while($row = $tree_sth->fetch()){
    $rows[$row['id']] = array('name'=>$row['name'], 'on'=>$row['on'], 'parent'=>$row['parent']);
}
function btree($parent){
    $has_childs = false;
    global $rows;
    foreach ($rows as $key => $value){
        if($value['parent'] == $parent){
            if ($has_childs === false){
                $has_childs = true;
                echo '<ul>';
            }
            echo '<li>'.$value['name'];
            btree($key);
            echo '</li>';
        }
    }
    if($has_childs === true){
        echo'</ul>';
    }
}

我很难理解的是PHP是如何处理foreach和递归函数的。

似乎这会导致函数和foreach循环的多个"实例"同时运行…对吗?

如果这是正在发生的事情,似乎随着我的清单的增长和孩子关系的加深,这种情况可能会减慢。这是真的吗?

简单来说,这个函数是这样工作的:

Begin-function (first instance):
     Begin-loop:
          Loop...
          Begin-func-again?
               Begin-function (second instance):
                   Begin-loop:
                        Loop... 
                        Begin-func-again?
                             Begin-function (third instance):
                                  Begin-loop:
                                      Loop...
                                      Begin-func-again? (NO)
                                          // termination point reached
                                  End-loop
                             End-function (third instance)
                    End-loop (from second instance)
               End-function (second instance)
     End-loop (from first instance)
End-function(first instance)

并不是同时创建了多个版本的函数,它们是按顺序进行的扩展和收缩,但它们都源于原始的函数调用。