//开始定义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); |
} |
} |