变量

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;

你可能感兴趣的:(变量)