一、代码
ZEND_BEGIN_ARG_INFO_EX(test, 0, 0, 1)
ZEND_ARG_CALLABLE_INFO(0, func, 0)
ZEND_END_ARG_INFO()
二、ZEND_BEGIN_ARG_INFO_EX 定义如下:
#define ZEND_BEGIN_ARG_INFO_EX(name, _unused, return_reference, required_num_args) \
static const zend_internal_arg_info name[] = { \
{ (const char*)(zend_uintptr_t)(required_num_args), NULL, 0, return_reference, 0, 0 },
name:是参数的名字
_unused 不用管,因为 展开宏之后并没有用到。
return_reference 表示是否返回引用。
required_num_args 函数至少传递的参数个数。
三、ZEND_END_ARG_INFO 定义
#define ZEND_END_ARG_INFO() };
四、最后上述代码展开后得到
static const zend_internal_arg_info test[] = { \
{ (const char*)(zend_uintptr_t)(required_num_args), NULL, 0, return_reference, 0, 0 },
ZEND_ARG_CALLABLE_INFO(0, func, 0)
}
五、ZEND_ARG_CALLABLE_INFO
用来显式声明参数为callable
,将检查函数、成员方法是否可调用