PHP扩展模块结构
所有PHP扩展遵循一个共同的结构
1、头文件包含(包括所有需要的宏、API)
2、C声明导出函数
3、声明Zend函数块
一、头文件包含
通过ext_seketon新建的扩展,默认都会新建一个php_extname.h的头文件。其中包含了
php.h,该文件导入Zend基本的宏和API。
二、声明导出函数
ZEND_FUNCTION(my_function),提供PHP中调用的函数。
展开此宏:
void zif_my_function(INTERNAL_FUNCTION_PARAMETERS)
void zif_my_function(int ht, zval *return_value, zval *this_ptr, int return_value_users, zend_executor_globals *executor_globals);
参数的作用:
参数 |
描述 |
ht |
接收的参数个数。考虑向后兼容,使用ZEND_NUM_ARGS()来代替ht |
return_value |
传递到PHP接口的返回值。 |
this_ptr |
如果这个函数是对象中的方法,this_ptr返回当前对象 |
return_value_used |
标志最终这个函数返回到PHP接口中是否被使用。 |
executor_globals |
指向zend引擎的全局设置。 |
三、声明Zend函数块
建立zend_function_entry数组,提供给ZEND作为PHP的接口。
typedef struct _zend_function_entry {
char *fname;
void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
unsigned char *func_arg_types;
} zend_function_entry;
参数 |
描述 |
fname |
提供给PHP中调用的函数名。例如mysql_connect |
handler |
负责处理这个接口函数的指针。 |
func_arg_types |
标记参数。可以设置为NULL |
<