变量

PHP是弱类型的,但在C这层,假设现在已经接收了参数,是要做参数类型判断的。

很简单 zval->type == "IS_BOOL" 。没错,更正确的方法应该是用宏。 类似许多工作,PHP已经做了大量的宏。

获取变量的类型 : 

Z_TYPE() ,Z_TYPE_P(),Z_TYPE_PP() ,分别是获取变量类型,获取变量类型指针,指针的指针。(Zend/zend_operators.h)

void func(zval *foo){

  if(Z_TYPE_P(foo) == "IS_BOOL"){

      php_printf("这个变量的数据类型是: BOOL");

   }

}

数据创建:

c分配内存:malloc(sizeof(zval))

正确应该是用宏:MAKE_STD_ZVAL(pzv)  。这个宏已优化的方式处理分配内存,并且自动处理内存错误。

ALLOC_INIT_ZVAL()与MAKE_STD_ZVAL(pzv)唯一区别是,第一者会将zval*数据初始化为IS_NULL。

ZVAL_NULL(pvz);         Z_TYPE_P(pzv) = IS_NULL;

ZVAL_LONG(pzv, l); Z_TYPE_P(pzv) = IS_LONG;

                                  Z_LVAL_P(pzv) = l;

ZVAL_TRUE(pzv);    ZVAL_BOOL(pzv, 1);

ZVAL_FALSE(pzv);   ZVAL_BOOL(pzv, 0);

ZVAL_BOOL(pzv, b);    Z_TYPE_P(pzv) = IS_BOOL;

                                      Z_BVAL_P(pzv) = b ? 1 : 0;

ZVAL_DOUBLE(pzv, d);          Z_TYPE_P(pzv) = IS_DOUBLE;

                                            ZVAL_DOUBLE(pzv, d);          

Z_DVAL_P(pzv) = d;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容