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

news/2024/11/30 18:53:08/

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

这里特别感谢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;
}

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


http://www.ppmy.cn/news/749225.html

相关文章

MTK6737 WCN省晶体问题

MTK6737是 在6735基础上的升级版本,使用的的是同样的MT6225L(FM、GPS、WCN、BT)芯片,不需要修改驱动,只需要注意是否省晶体的配置,目前只是一个记录,需要根据核心模块的原理选择。 此处根据原理图得知使用…

MT6737的lens HAL层分析

lens驱动和HAL分析 一.6737的lens 搜索HAL层分析 Mcu_drv.cpp (vendor\mediatek\proprietary\hardware\mtkcam\legacy\platform\mt6735\core\featureio\drv\lens) 根据摄像头搜索lens MCUDrv::lensSearch( unsigned int a_u4CurrSensorDev, unsigned int a_u4CurrSensorId)//C…

[MT6737] MTK 编译环境搭建

Hardware: MTK6737 Android: 6.0(API 23) Kernel: Linux 3.4.67 安装编译环境并编译 安装编译环境依赖包bootloader 和 kernel 编译Android 编译打包硬件参数 MTK6737Check SDK Version编译中碰到的问题 clang 问题STATIC_LIBRARIES SHARED_LIBRARIES 类型的问题烧录 安装编译环…

MT6737 datasheet资料介绍

MT6737 datasheet/规格书: MT6737 LTE Smartphone Application Processor Technical Brief 资料介绍 MT6737处理器概述: MT6737是一个集成了蓝牙、fm、wlan和gps模块的高度集成的基带平台,整合了调制解调器、应用程序处理和连接子系统以启…

MT6737芯片技术资料集锦下载

MT6737这款处理器现在还有人在做 1.MT6737_memory_QVL Discrete eMMC: 2. 6737_PCB_Design_Guidelines-English-V0_1 MT6737x_Design_Notice MT6737T_Dual_camera_Design_Notice MT6179_How_to_Configure_3G_TDD_RF_Custom_File MT6737x_MT6328_MT6169_MT6158_MT6…

MT6737m android7.0的FM,GPS,WIFI,BT不工作

原板子使用android5.0mtk6735,现在需要改为android7.0MT6737M,直接在原板子上把MT6735替代为MT6737m,配置好flash,LCM和tp,(把sensor全部关闭了),开机后MT6625好像是没有工作起来,因…

[Android6.0][MTK6737] 启动流程分析

OS:Android6.0 Hardware:MTK6737 一、启动流程概览 1. BootRom 2. Preloader 3. LK 4. Kernel 5. Android 二、Bootloader 引导 2.1 preloader 启动过程 2.1.1 preloader 的功能 preloader 中的硬件部分 2.1.2 preloader 启动代码 2.2 LK 启动过程 2.2.1 LK 中的上电情景 2.…

MTK 6737 android6.0 user版本打开root权限(adb root权限和 apk root权限)

系列文章 MTK 6735/6739/6755/6763 android8.1 user版本打开root权限(adb root权限和 apk root权限) 相比较 android8.1 而言,6.0 的要简单很多 1、首先 6.0 不需要关闭 DM-verity,只需开发 adb root 后就能成功 remount,对 system 分区 rw 操作 2、6.0 无需添加在 init…