PHP扩展开发(4) - 多类扩展

由于函数和单类的扩展,网上一搜一大片,这里就不再叙述了。

这里特别感谢laruence(鸟哥)开源的yaf扩展,解决困扰我多时的多类问题,还在看他的代码学习中,这里是对多类写法学习的一个阶段总结。

 
 
1. 修改php_simple.h
 
 增加:
#define SIMPLE_STARTUP (module)                    ZEND_MODULE_STARTUP_N(simple_##module)(INIT_FUNC_ARGS_PASSTHRU )
#define SIMPLE_MINIT_FUNCTION (module)                ZEND_MINIT_FUNCTION(simple_##module)
 
2. 添加simple_util.h
 
#ifndef _SIMPLE_UTIL_H_
#define _SIMPLE_UTIL_H_
 
extern zend_class_entry *simple_util_ce;
 
SIMPLE_MINIT_FUNCTION(util);
 
#endif

 

 
3. 添加simple_util.c
 
#ifdef HAVE_CONFIG_H
#include "config.php"
#endif
 
#include "php.h"
#include "php_ini.h"
#include "Zend/zend_interfaces.h"
 
#include "php_simple.h"
#include "simple_util.h"
 
//这里是定义静态类
static zend_class_entry *simple_util_ce;
 
/** {{{ ARG_INFO
*/
ZEND_BEGIN_ARG_INFO_EX(simple_util_void_arginfo, 0, 0, 0)
ZEND_END_ARG_INFO()
/* }}} */
 
PHP_METHOD(simple_util, read) {
        RETURN_STRING("这里返回函数结果" , 1);
}
 
 
zend_function_entry simple_util_methods[] = {
        PHP_ME(simple_util, read, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC )
       {
               NULL, NULL, NULL
       }
};
 
//相当于把多个扩展合在一起,每个类各自ZEND_MINIT_FUNCTION
SIMPLE_MINIT_FUNCTION(util) {
        zend_class_entry ce;
        INIT_CLASS_ENTRY(ce, "Util" , simple_util_methods);
 
       simple_util_ce = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
 
        return SUCCESS;
}

 

 
4. 修改simple.c
 
在ZEND_MINIT_FUNCTION里加上
 
SIMPLE_STARTUP(util);
 
结果是:
 
 
PHP_MINIT_FUNCTION(boxun)
{
        REGISTER_INI_ENTRIES();
 
        SIMPLE_STARTUP(util);
 
        return SUCCESS;
}

 

 
即在模块加载时引入,各类独立,只是写在同一个扩展里,这样写很清晰。 
posted @ 2016-01-25 10:07  imarno  阅读(1428)  评论(0编辑  收藏  举报