PHP中的变量

PHP在声明或者使用变量的时候,不需要显式指定数据类型,但是PHP中依然是有类型这一概念的。

PHP中的类型分为三类:

(1)标量类型:boolean、integer、float、string

(2)复合类型:array、object

(3)特殊类型:resource、NULL


PHP中变量的值是存储在名为zval的结构体中的,

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; 是否为引用变量

};

其中type的值可以为:IS_NULL、IS_BOOL、IS_LONG、IS_DOUBLE、IS_STRING、IS_ARRAY、IS_OBJECT、IS_RESOURCE。

变量的实际值存储在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;

} zvalue_value;


从中我们也可以发现,php记录了string类型变量的长度,因此strlen可以在常数时间内获得字符串的长度。

数组类型的变量是存储在hashtable中的,

对象类型的变量使用了一种名为zend_object_value的结构体来存储,

typedef struct _zend_object_value {

    zend_object_handle handle;  //  unsigned int类型,EG(objects_store).object_buckets的索引

    zend_object_handlers *handlers;

} zend_object_value;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值