
//开始定义php语言中的函数gettype |
PHP_FUNCTION(gettype) |
{ |
//这个arg间接指向就是我们传给gettype函数的参数。是一个zval**结构 |
//所以我们要对他使用__PP后缀的宏。 |
zval **arg; |
//这个if的操作主要是让arg指向参数~ |
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &arg) == FAILURE) { |
return; |
} |
|
//调用Z_TYPE_PP宏来获取arg指向zval的类型。 |
//然后是一个switch结构,RETVAL_STRING宏代表这gettype函数返回的字符串类型的值 |
switch (Z_TYPE_PP(arg)) { |
case IS_NULL: |
RETVAL_STRING("NULL", 1); |
break; |
case IS_BOOL: |
RETVAL_STRING("boolean", 1); |
break; |
case IS_LONG: |
RETVAL_STRING("integer", 1); |
break; |
case IS_DOUBLE: |
RETVAL_STRING("double", 1); |
break; |
|
case IS_STRING: |
RETVAL_STRING("string", 1); |
break; |
|
case IS_ARRAY: |
RETVAL_STRING("array", 1); |
break; |
case IS_OBJECT: |
RETVAL_STRING("object", 1); |
break; |
case IS_RESOURCE: |
{ |
char *type_name; |
type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(arg) TSRMLS_CC); |
if (type_name) { |
RETVAL_STRING("resource", 1); |
break; |
} |
} |
default: |
RETVAL_STRING("unknown type", 1); |
} |
} |



