首先,我们一般说php变量类型8种
标量类型:布尔boolean,整形integer,浮点float,字符string
复杂类型:数组array,对象object
特殊类型:资源resource,空null
php底层所有变量都是以结构体zval来实现
其中refcount__gc和is_ref__gc表示变量是否是一个引用。type字段标识变量的类型,type的值可以是:
IS_NULL,IS_BOOL,IS_LONG,IS_FLOAT,IS_STRING,IS_ARRAY,IS_OBJECT,IS_RESOURCE。PHP
根据type的类型,来选择如何存储到zvalue_value。
C语言中,用"\0"作为字符串结束符。也就是说一个字符串"Hello\0World"在C语言中,用printf来输出的话,只能输出hello,因为"\0"会认为字符已经结束。PHP中是通过结构体的_zval_value.str.len来控制字符串长度,相关函数不会遇到"\0"结束。所以PHP的字符串是二进制安全的。
变量的符号表与zval的值的映射是通过HashTable实现的。
例如:$val = 'helloworld'; $val的变量名存储在变量符号表中,代表$val的类型和值的zval结构存储在哈希表中,内
核通过变量的符号表与zval地址的哈希映射,来实现PHP变量的存取。