background image

 
value 表示该 zval 的值,他也是个共同体,代码如下

 

复制代码 代码如下:
 
typedef union _zvalue_value { 
long lval; 

/* long value */

 

double dval; 

/* double value */

 

struct { 
char *val; 
int len; 
} str; 
HashTable *ht; 

/* hash table value */

 

zend_object_value obj; 
} zvalue_value;

现在你知道 php 是如何类型变换的了,因为他的值存的其实是个可以代表任何类型的结
构体,而具体的取值则根据 type 来决定是用共同体里的哪个变量来存值的

见下面的例子 1

代码如下:
 
.-----------

$a

 = 1;

$b

 = 

$a

;

$c

 = 

$a

;

.-----------

$d

 = &

$a

;

.-----------

$a

 = 2;

.-----------

$b

 = null;

查看 refcount,is_ref,zval 的变化
执行完第一部分后来看看输出

1-----------------------------
a:(refcount=3, is_ref=0),int 1
b:(refcount=3, is_ref=0),int 1
c:(refcount=3, is_ref=0),int 1

可以看出来 a,b,c 使用同一个 zval
再看执行完第二部分的