我正在编写一个 php 扩展,需要注册一个资源。我一直在阅读有关如何执行此操作的信息以及我看到的所有传递变量的示例
module_number
作为
的最后一个参数zend_register_list_destructors_ex(NULL, NULL, DESCRIPTOR_NAME, module_number);
我找到的所有文档都没有解释“module_number”是什么。我试图在调用该函数时使用该变量名,但出现以下错误:
ext\niklos\niklos.c(132) : error C2065: 'module_number' : undeclared identifier
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\
VC\Bin\cl.exe"' : return code '0x2'
Stop.
函数调用的最后一个参数应该是什么,或者所有其他示例一直在使用的“module_number”是什么?提前致谢。
最佳答案
zend_register_list_destructors_ex 必须在您的扩展注册的 PHP_MINIT 函数中调用
如果您查看 PHP_MINIT 的宏定义,它会扩展为
int zm_startup_##module(int type, int module_number TSRMLS_DC)
##module 是你的模块的字符串名称
module_number 是引擎传入启动函数的整数
该模块号是 PHP 在内部保留的 id,用于在注册时识别扩展
shmop 扩展是使用资源的简单扩展的一个很好的例子
http://lxr.php.net/xref/PHP_5_5/ext/shmop/shmop.c#137
也就是调用zend_register_list_destructors_ex的实现
http://lxr.php.net/xref/PHP_5_5/ext/shmop/shmop.c#96
这里是注册 MINIT 函数的地方
关于php - 什么是 'module_number' 作为 zend_register_list_destructors_ex 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256142/