PHP内核变量访问宏

使用"zval.type=IS_LONG" 方式可以设置一个变量的类型,不过这样做不是很合适,因为不能预测PHP以后的版本会发生什么变化,有可能在以后的版本中type成员变量的名字歌城type_gc或者其他的名字,那么之前写好的扩展就不能适应这些版本了。为了解决这个问题,PHP内核中提供了一个访问和设置变量类型的方法,具体如下:

Z_TYPE(zval) 对应zval结构体的实体
Z_TYPE_P(&zval) 对应zval结构体的指针
Z_TYPE_PP(&&zval) 对应zval结构体的二级指针

可以用如下方式设置变量的类型:

Z_TYPE(zval) = IS_LONG;

用以下方式访问变量的类型:

if (Z_TYPE(zval) == IS_LONG) {
    printf("is long \n");
}

这样,就算以后zval结构体的type成员变量改名,我们的扩展也可以继续使用。

与变量的类型一样,变量的值也有相应的访问宏定义,如下表:

类型访问宏
整数类型Z_LVAL(zval)
Z_LVAL_P(&zval)
Z_LVAL_PP(&&zval)
浮点类型Z_DVAL(zval)
Z_DVAL_P(&zval)
Z_DVAL_PP(&&zval)
布尔类型Z_BVAL(zval)
Z_BVAL_P(&zval)
Z_BVAL_PP(&&zval)
字符串类型取得值:
Z_STRVAL(zval)
Z_STRVAL_P(&zval)
Z_STRVAL_PPP(&&zval)
取得长度:
Z_STRLEN(zval)
Z_STRLEN_P(&zval)
Z_STRLEN_PP(&&zval)
数组类型Z_ARRVAL(zval)
Z_ARRVAL_P(&zval)
Z_ARRVAL_PP(&&zval)
资源类型Z_RESVAL(zval)
Z_RESVAL_P(&zval)
Z_RESVAL_PP(&&zval)

使用上表可以设置一个变量的类型和值。例如,创建一个值为10的整数变量lvar:

zval lvar;
Z_TYPE(lvar) = IS_LONG;
z_LVAL(lvar) = 10;

如果用PHP脚本的话,相当于一下代码:

$lvar = 10;

注意: PHP内核还利用上面的宏包装一些更方便的宏。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值