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

这里特别感谢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;
}
 
即在模块加载时引入,各类独立,只是写在同一个扩展里,这样写很清晰。 

PHP扩展开发(4) - 多类扩展的更多相关文章

  1. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  2. 用扩展开发一个PHP类

    原文:http://my.oschina.net/mickelfeng/blog/122519?p=1 假设我们要用PHP扩展实 现一个类Person,它有一个private的成员变量$_name和两 ...

  3. php扩展开发3--扩展类传参数

    1.需要实现的细节 实现一个person类 ,实现一个doing方法和saying方法 在构造方法中传递一个数组,在doing中打印此数组 saying方法中,构建一个空数组,返回,不需要传参. 2. ...

  4. php扩展开发2--添加类

    1.需要实现的细节 实现一个person类 实现一个doing方法和saying方法 2.第一个扩展 2.1创建类的扩展: [root@bogon ext]# cd /usr/local/src/ph ...

  5. PHP扩展开发01:第一个扩展【转】

    我们先假设业务场景,是需要有这么一个扩展,提供一个叫ccvita_string的函数,他的主要作用是返回一段字符.(这个业务场景实在太假,大家就这么看看吧)对应的PHP代码可能是这样: functio ...

  6. PHP扩展开发01:第一个扩展

    我们先假设业务场景,是需要有这么一个扩展,提供一个叫ccvita_string的函数,他的主要作用是返回一段字符.(这个业务场景实在太假,大家就这么看看吧)对应的PHP代码可能是这样: functio ...

  7. PHP扩展开发之简单类开发

    接下来我们要用扩展的形式实现以下类(演示环境:linux.php-5.5.34-src) <?php class Person { private $_name; public function ...

  8. PHP扩展开发--编写一个helloWorld扩展

    为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多.同样的运算代码,使用C来开发,性能会比PHP要提升数百倍. 另外C扩展是在进程启动时加载的,PHP代码只能操作Request生命周期的数据 ...

  9. PHP 扩展开发检测清单(扩展开发必读)

    想要做出一个成功的 PHP 扩展包,不仅仅是简单的将代码放进文件夹中就可以了,除此之外,还有非常多的因素来决定你的扩展是否优秀.以下清单的内容将有助于完善你的扩展,并且在 PHP 社区中得到更多的重视 ...

随机推荐

  1. 生产环境搭建MySQL复制的教程(转)

    [导读] 网络上有很多关于MySQL复制搭建的步骤和范例,以及手册上有一章完整的篇幅,讲述MySQL复制的原理.搭建步骤.优化等,但依然存在很多刚开始学习MySQL知识或者刚进入DBA行业的朋友咨询, ...

  2. Qweb报表中的Reload from Attachment参数

    通过继承的方式修改了Qweb报表却发现没有生效,经查,其原因在于报表的设置中勾选了 Reload from Attachment 选项. 将本选项取消选中即可生效.

  3. Fireworks Extension —— 开发篇(Dom模型)

    如上一篇博文所叙述的,一个很偶然的机会,我得知可以使用Javascript开发Fireworks插件,又注意到了视觉小伙伴的需求,于是便上手开发Fireworks Extension了. 很幸运的,在 ...

  4. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (三)Nginx负载均衡配置

    Nginx反向代理到单个PHP-FPM(PHP-FPM可位于不同机器) 0.首先,创建我们的网站根目录[注:须在PHP-FPM所在的那台机器创建](以后网站的代码放到此目录下): mkdir /opt ...

  5. GS1011无线模块的使用简介。

    一.硬件说明: 只是用电脑的串口助手与之通信,利用了max232进行电平转换.是用模块的UART0作为通信接口. 模块引脚 接点 说明   1.17.32.48 GND 模块地   9 3.3V VB ...

  6. 【HDOJ】4515 小Q系列故事——世界上最遥远的距离

    简单题目,先把时间都归到整年,然后再计算.同时为了防止减法出现xx月00日的情况,需要将d先多增加1,再恢复回来. #include <cstdio> #include <cstri ...

  7. JavaScript IDE 大盘点,让选择不再难

      文章来源:http://gcdn.gcpowertools.com.cn/showtopic-24110-1-3.html 阅读本文之前,分享大家一张图片,看图会发现JavaScript开发需求最 ...

  8. C++ deepin

    访问类成员函数(cin.getline())方式是从访问结构成员变量方式衍生而来; C++结构体变量申明 struct关键字可省略; c++结构体变量声明初始化, = 可省略;但此需用在c++,大家都 ...

  9. jquery $.each()用法

    今天看到一个新的each玩法即each作为jquery的函数(平时用的大概都是用的each方法)使用: $.each([ 52, 97 ], function( index, value ) { al ...

  10. 解决 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

    "Accept-Encoding": "gzip, deflate", 这条信息代表本地可以接收压缩格式的数据,而服务器在处理时就将大文件压缩再发回客户端,IE ...