0

基本上在使用大型数组的情况下,null如果发生错误,则很方便传回,因为如果$array = nullthen$array[] = 1[ 1 ]并且null也可以在可调用的上下文中使用,即。function (array $array = null)将接受null为可接受的值。基本上null很方便,因为如果您有错误处理代码,您可以轻松地将其识别为错误,但如果您不在乎,也可以轻松忽略它。

在大多数情况下,这是相当直接的,但是有一个极端情况,PHP 并不真正支持它,那就是在不一定接受引用但需要的函数上下文中传回引用时有时传回 null,但有时传回引用(大多数情况下这不是问题,因为您返回的是对实例变量的引用,但有时情况并非如此)。null还有以非尴尬的方式调用具有值的函数的情况。

传递引用的原因显然是为了省去复制数组的麻烦(尤其是当它非常大时)。

以下“解决方案”...

\error_reporting(-1);

function & nil()
{
    $nil = null;
    return $nil;
}

function & pass(array & $variable = null)
{
    return $variable;
}

function & check ()
{
    return nil();
}

$test = pass(nil());
$test = &pass(nil());

$test1 = &check();
$test1[] = 1;
$test2 = &check();
$test2[] = 2;

\var_dump($test1, $test2);

有效,但是...

我的问题是PHP 是否保证在对局部变量的所有引用都被垃圾收集之前不会被垃圾收集?或者是未定义的行为。

4

1 回答 1

2

当引用计数大于 0 时,PHP 永远不会 GC。

于 2013-02-01T10:21:29.257 回答