[英]Variable scope in php for a reference return?
可变范围(如定义在这里 )
变量的范围是定义它的上下文。 在大多数情况下,所有PHP变量只有一个范围。 此单一范围也涵盖包含和所需文件。
//a.php
<?php
class a {
function &func () {
$avar = array("one", "two", "three");
return $avar;
}
?>
__
//b.php
<?php
class b {
include("a.php");
$ainstance = new a;
var_dump($ainstance->func());
}
?>
上面的代码将按预期转储有关变量的信息(我的意思是WRT函数func
形成的结构)。
我怀疑的是,
PHP中的所有变量都是zval*
,即C指针。
如果按值返回,在大多数情况下,PHP将自动复制zval*
并返回该值。 如果通过引用返回,PHP将返回原始zval*
。 在这些情况下,返回的zval*
refcount都不会达到0。
在C方面,当你返回一个变量时,它会返回一个指向zval
的指针,这是一个包含变量信息的C结构(即type,value, is_ref
和is_ref
标志)。
因为它是一个指针,它实际上并没有返回一个本地C变量,而是一个预先分配的zval
指针,它指向实际zval
的位置。 除非zval*
refcount达到0(即:不存储返回值),否则该变量仍将存在直到程序结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.