php 变量实现的,PHP 变量的实现

PHP 虽然是弱类型语言,但是这并不意味着 PHP 的变量没有类型

PHP 变量的类型共有 8 种,可以分为以下三类标量类型 -- boolean、integer(long)、float(double)、string

复合类型 -- array、object

特殊类型 -- resource、NULL

PHP 的变量存储在 zval 结构体中,定义于 Zend/zend.h 文件中

// struct _zval_struct

// php 变量描述结构 {{{

struct _zval_struct {

/* Variable information */

zvalue_value value;/* value */// 变量值

zend_uint refcount__gc;// 引用计数

zend_uchar type;/* active type */// 变量的具体类型

zend_uchar is_ref__gc;// 是否为引用

}; // }}}

变量的值存储在一个联合体中:

// union zvalue_value

// 变量值存储结构 {{{

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;

zend_ast *ast;

} zvalue_value; // }}}

_zval_struct 的 type 字段存储了变量类型的唯一标识,他的值与实际的变量类型有一个对应关系

在 _zvalue_value 中,我们可以看到,integer 是使用 long 类型存储的,而浮点类型则是以 double 来存储的,array 是以 php 实现的哈希表 HashTable 结构来存储的,object 则是以 zend_object_value 结构来存储的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值