变量范围(定义为here)
变量的范围是定义它的上下文。在大多数情况下,所有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
中形成的结构)。
我怀疑是,
答案 0 :(得分:4)
PHP中的所有变量都是zval*
,即C指针。
如果按值返回,PHP在大多数情况下会自动复制zval*
并返回该值。如果您通过引用返回,PHP将返回原始zval*
。在这些情况下,返回的zval*
引用计数都不会达到0。
在C方面,当你返回一个变量时,它会返回一个指向zval
的指针,这是一个包含变量信息的C结构(即类型,值,引用计数和{{ 1}}标志)。
由于它是一个指针,它实际上并没有返回一个本地C变量,而是一个预先分配的is_ref
指针,它指向实际zval
的位置。除非zval
引用计数达到0(即:不存储返回值),否则该变量仍将存在,直到程序结束。