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

文章介绍了如何利用laruence(鸟哥)开源的yaf扩展解决PHP中的多类问题。通过修改php_simple.h添加SIMPLE_STARTUP和SIMPLE_MINIT_FUNCTION宏,创建simple_util.h和simple_util.c文件定义静态类及方法,然后在ZEND_MINIT_FUNCTION中引入,实现了将多个类合并到同一个扩展中,保持代码清晰。
摘要由CSDN通过智能技术生成

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

这里特别感谢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, , , )
ZEND_END_ARG_INFO()
/* }}} */
 
PHP_METHOD(simple_util, read) {
        RETURN_STRING("这里返回函数结果" , );
}
 
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;
}

即在模块加载时引入,各类独立,只是写在同一个扩展里,这样写很清晰。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lmr廖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值