zoukankan      html  css  js  c++  java
  • Ubuntu下的PHP扩展开发(二):认识变量

    打开Zend/zend.h文件,会发现以下结构体

    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;
    struct _zval_struct {
        /* Variable information */
        zvalue_value value;        /* value */
        zend_uint refcount__gc;
        zend_uchar type;    /* active type */
        zend_uchar is_ref__gc;
    };

    zvalue_value为PHP中变量具体的值,具体的放到下面说。

    _zval_struct即zval结构体, 是PHP中的变量在内核中的表现形式。它有四个成员变量,解释如下:

    value  变量的值,zvalue_value的实例
    refcount_gc 变量的引用计数,这里关系到写时复制机制
    type 变量的类型
    is_ref_gc  变量是否被引用,即为C语言中的&

    对于zvalue_value结构体,它的成员变量比较多,可以看到它是一个union联合体。因此PHP的变量其实是在zval结构体的type变量上标注类型,在value变量上存储变量。zvalue_value结构体不同类型对应的成员变量如下表:

    PHP语言层  zvalue_value的成员变量
    long,bool,resource lval
    double dval
    string str结构体
    array ht
    object obj

    为了更方便的使用这些变量,zend引擎定义了以下几种变量类型:IS_NULL  IS_LONG IS_DOUBLE IS_STRING IS_ARRAY IS_OBJECT IS_BOOL IS_RESOURCE ,每一个宏对应一种数据类型。我们会在后面使用到这些宏。

     

     

  • 相关阅读:
    Linux 三剑客之SED
    搭建Docker环境
    Docker rabbitmq
    Docker Redis 集群
    Docker Mysql
    lerna 大前端项目代码重用解决方案
    将create-react-app从javascript迁移到typescript
    使用 React hooks 优雅解决 mp3 的播放 和 暂停
    React 代码 Import Svg as ReactComponent 失败
    vue3 自定义 hooks 优雅处理异步调用 ajax
  • 原文地址:https://www.cnblogs.com/qifei/p/3967694.html
Copyright © 2011-2022 走看看