background image

PHP 代码:PHP 变量存储的说明

1.1.1 zval 结构
Zend 使用 zval 结构来存储 PHP 变量的值,该结构如下所示:

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;
 
struct _zval_struct {

/* Variable information */

zvalue_value value; 

/* value */

zend_uint refcount;
zend_uchar type; 

/* active type */

zend_uchar is_ref;
};
typedef struct _zval_struct zval;

Zend 根据 type 值来决定访问 value 的哪个成员,可用值如下:

IS_NULL

N/A

IS_LONG

对应 value.lval

IS_DOUBLE

对应 value.dval

IS_STRING

对应 value.str

IS_ARRAY

对应 value.ht

IS_OBJECT

对应 value.obj

IS_BOOL

对应 value.lval.

IS_RESOURC

E

对应 value.lval

根据这个表格可以发现两个有意思的地方:首先是 PHP 的数组其实就是一个 HashTable,