PHP扩展开发-06-变量的定义和使用

1      zval结构分析

1.1     初识zval

我们先来看一下zval的定义:

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;

};

 

typedef struct _zval_structzval;

1.2          zval的创建和使用

我们先来看一段代码:

PHP_FUNCTION(hello)

{

    zval* t;

    ALLOC_INIT_ZVAL(t);

    Z_TYPE_P(t)= IS_LONG;

    Z_LVAL_P(t)= 1234567890;

    zval_ptr_dtor(&t);

}

         ALLOC_INIT_ZVAL宏用来给t分配内存,并且将t初始化为一个空变量,Z_TYPE_P用来给zval变量指定变量的类型,Z_LVAL_P用来给变量赋值,zval_ptr_dtor用来清理变量空间。

         我们可以使用上面的代码使用变量外,我们还可以使用宏ZVAL_LONG来快速的定义变量和给变量赋值。也就是说上面的代码我们可以使用下面的代码来代替。

          PHP_FUNCTION(hello)

{

    zval* t;

    ZVAL_LONG(t, 1234567890);

}

         我们可以使用下面的宏来快速的定义和使用zval变量:

         ZVAL_RESOURCE、   ZVAL_BOOL、ZVAL_NULL、ZVAL_LONG、ZVAL_DOUBLE

ZVAL_STRING、ZVAL_STRINGL、ZVAL_EMPTY_STRING、ZVAL_ZVAL

         上面的宏很简单,如果大家有什么不明白的地方,大家可以去看看源代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值