💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
1\. 变量存储结构 变量的值存储到以下所示zval结构体中。 zval结构体定义在Zend/zend.h文件,其结构如下: ~~~ typedef struct _zval_struct zval; ... struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; ~~~ PHP使用这个结构来存储变量的所有数据。和其他编译性静态语言不同, PHP在存储变量时将PHP用户空间的变量类型也保存在同一个结构体中。这样我们就能通过这些信息获取到变量的类型。 zval结构体中有四个字段,其含义分别为: | 属性名 | 含义 | 默认值 | | --- | --- | --- | | refcount\_\_gc | 表示引用计数 | 1 | | is\_ref\_\_gc | 表示是否为引用 | 0 | | value | 存储变量的值 | | | type | 变量具体的类型 | | 2.变量类型: zval结构体的type字段就是实现弱类型最关键的字段了,type的值可以为: IS\_NULL、IS\_BOOL、IS\_LONG、IS\_DOUBLE、IS\_STRING、IS\_ARRAY、IS\_OBJECT和IS\_RESOURCE 之一。 从字面上就很好理解,他们只是类型的唯一标示,根据类型的不同将不同的值存储到value字段。 除此之外,和他们定义在一起的类型还有IS\_CONSTANT和IS\_CONSTANT\_ARRAY。 这和我们设计数据库时的做法类似,为了避免重复设计类似的表,使用一个标示字段来记录不同类型的数据。