通过引用传递的PHP局部变量是否可以在函数外部生存?

时间:2013-01-31 09:42:46

标签: php php-internals

基本上在处理大型数组的情况下,如果发生错误,将null传回会很方便,因为$array = null然后$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是否保证在对所有引用进行垃圾回收之前,不会对本地变量进行垃圾回收?或者是那种未定义的行为。

1 个答案:

答案 0 :(得分:2)

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