PHP中的变量

来源:互联网 发布:c语言是否有指针 编辑:程序博客网 时间:2024/06/10 02:45

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
原创粉丝点击