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,