介绍:
每个php变量存在一个叫
"zval"
的变量容器中。一个zval
变量容器,除了包含变量的类型和值,还包括两个字节
的额外信息。第一个是"is_ref"
,是个bool值
,用来标识这个变量是否是属于引用集合
(referenceset)。通过这个字节,php引擎才能把普通变量和引用变量区分开来,由于php允许用户通过使用&来使用自定义引用,zval变量容器中还有一个内部引用计数机制
,来优化内存使用。第二个字节是"refcount"
,用以表示指向
这个zval变量容器的变量(也称符号即symbol)个数。当"refcount"
的值是1
时,”is_ref”的值总是FALSE
.
例:
<?php
$a = 10;//将常量值赋给变量,会为a分配内存空间
$b = $a;//变量赋值给变量,给b分配了内存空间,并将a变量的类型和值复制一份存储到b的存储空间
$c = &$a;//引用是不会为c分配空间的,c和a是共用一份内存空间数据。
PHP中将一个变量赋值给新变量时,不会立即为新变量分配内存空间,只是增加了对内存空间的引用。当原变量或者新变量作出任何改变时,才会为新变量 分配一块内存空间。