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
再看执行完第二部分的