当前位置: 移动技术网 > IT编程>开发语言>PHP > PHP内核变量访问宏

PHP内核变量访问宏

2018年02月07日  | 移动技术网IT编程  | 我要评论

股票交易费用,低肩乐队,曾伟和蒋梅

使用"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内核还利用上面的宏包装一些更方便的宏。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网