PHP的变量结构

6 篇文章 0 订阅

PHP在内核中是通过zval这个结构体存储变量的:

struct _aval_struct {
    zvalue_value value;      // 变量的值
    zend_unit refcount__gc;  // 引用计数
    zend_uchar type;         // 变量当前的数据类型
    zend_uchar is_ref__gc;   // 是否引用状态
};
typedef struct _zval_struct zval;

// 在Zend/zend_types.h里定义的:
typedef unsigned int zend_uint;
typedef unsigned char zend_uchar;

// zvalue_value的定义:
type union _zvalue_value {
    long lval;
    double dval;
    struct {
        char *val;
        int len;   // 字符长度
    } str;
    HashTable *ht;
    zend_object_value obj;
} zvalue_value;

其中zvalue_value中ht是HashTable类型, HashTable在PHP中至关重要,它既具有双向链表的优点,同时具有能与数组匹敌的操作性能,这个数据结构几乎是PHP内核实现的基础.
所有的用户端定义的变量保存在一个符号表里,而这个符号表其实就是一个HashTable,它的每一个元素都是一个zval*类型的变量. 不仅如此,保存用户定义的函数,类,资源等的容器都是以HashTable的形式在内核中实现的.

两篇很不错的文章:

哈希表:

http://www.php-internals.com/book/?p=chapt03/03-01-01-hashtable

PHP的哈希表实现:

http://www.php-internals.com/book/?p=chapt03/03-01-02-hashtable-in-php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值