通过引用传递的PHP局部变量在函数外部是否可靠?
基本上,在使用大型数组的情况下,如果发生错误,可以方便地将通过引用传递的PHP局部变量在函数外部是否可靠?,php,php-internals,Php,Php Internals,基本上,在使用大型数组的情况下,如果发生错误,可以方便地将null传回去,因为如果$array=null那么$array[]=1就是[1],并且null也可以在可调用的上下文中使用,即函数(array$array=null)将接受null作为可接受的值。基本上,null很方便,因为如果您有错误处理代码,您可以很容易地将其识别为错误,但如果您不在意,也可以很容易地忽略它 在大多数情况下,这是相当直接的,但是有一种情况,PHP并不是真的很好地支持它,那就是在函数的上下文中传回一个引用,该函数不一定接
null
传回去,因为如果$array=null
那么$array[]=1
就是[1]
,并且null
也可以在可调用的上下文中使用,即函数(array$array=null)
将接受null
作为可接受的值。基本上,null
很方便,因为如果您有错误处理代码,您可以很容易地将其识别为错误,但如果您不在意,也可以很容易地忽略它
在大多数情况下,这是相当直接的,但是有一种情况,PHP并不是真的很好地支持它,那就是在函数的上下文中传回一个引用,该函数不一定接受引用,但有时需要传回null,但有时需要传回一个引用(大多数情况下,这不是问题,因为您返回的是对实例变量的引用,但有时情况并非如此)。还存在以非笨拙的方式使用null
值调用函数的情况
传递引用的原因显然是为了省去复制数组的麻烦(特别是当数组非常大时)
下面的“解决方案”
工作,但是
我的问题是PHP是否保证在对局部变量的所有引用被垃圾收集之前不会对其进行垃圾收集?或者这是一种未定义的行为。当引用计数大于0时,PHP将永远不会GC任何内容。问题1)您使用的是哪个PHP版本?问题2)Whaaat?尽可能避免引用。他们让你的生活很悲惨。返回null是一种众所周知的反模式,因为它强制在代码中执行is_null检查。函数只能返回一种类型。@Ben PHP版本是最新的稳定版本。所以现在5.4.x“只有当你有足够的技术理由时才返回引用”@Ben你知道问题的答案吗?
\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);