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;