递归函数引用集合


Recursive function referenced collection

我试图通过填充引用数组来使用递归逻辑生成一个集合,但我对引用语法不那么稳定。下面的例子有意义吗?(我知道如何正确使用这个操作符吗?)如果没有,如何做到这一点?

// I want all uniquely named subfolders returned as array
$allFolders = recursive('/');
function recursive($folder,$collection=array())
{
    /* Look up direct children here */
    foreach ($subFolders as $folder) {
         if (!isset($collection[$folder])) {
             $collection[$folder] = $folder;
             recursive($folder,&$collection);
         }
    }
    return $collection;
}

您需要在函数定义中声明"按引用" -默认值是相当无用的,因为在函数完成后您将无法访问它。你应该这样写:

$folder = '/';
$collection = array();
recursive($folder, $collection);
print_r($collection);
function recursive($folder, &$collection)
{
    ...
}

虽然PHP5将接受按引用参数的默认值,但它没有什么意义。

你也不应该在调用中使用"by reference":

recursive($folder, $collection);

虽然第二种(通过调用中的引用)在早期版本的PHP中是允许的,但它已被弃用。