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

这里特别感谢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. 小公司生存,一般活过第一年,就能撑3年(读书笔记:成败关键,关键是你是否拥有现金流客户)good

    小公司生存,一般活过第一年,就能撑3年,一般能撑过3年,到第7年遇到坎,如果第7年突破,能活过10年,是想死也不容易,等到第二个七年,可以搞搞人事地震了,因为要二次创业. -------------- ...

  2. Xamarin.Forms App Settings

    配合James Montemagno的Component [Settings Plugin],实现Xamarin.Forms的设置. 更新系统配置且不需要进行重启app. 方式一xml Xamarin ...

  3. PL/SQL 包头和包体

    包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量 变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令. 实例如下: CREAT ...

  4. css属性之appearance

    appearance 属性允许您使元素看上去像标准的用户界面元素. 案例: 使 div 元素看上去像一个按钮 <!DOCTYPE html> <html> <head&g ...

  5. EF 接收OUTPUT参数的方法 How to Retrieve Stored Procedure Output Parameters in Entity Framework

    原文地址:http://blogs.microsoft.co.il/gilf/2010/05/09/how-to-retrieve-stored-procedure-output-parameters ...

  6. vimrc 留备份

    set encoding=UTF-8 "encode with UTF-8"set backspace=2set nusyn onset ai!syntax enablesynta ...

  7. JS(一)

    循环还是很有意思的: 1) 安全数的作业: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  8. html(四)

    今天html的内容就讲完了,感觉时间过得好快啊,知识点比较多,需要慢慢消化啊... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...

  9. Highcharts教程

    Highcharts特性: 兼容性 - 支持所有主流浏览器和移动平台(android.iOS等). 多设备 - 支持多种设备,如手持设备 iPhone/iPad.平板等 免费使用 - 开源免费 轻量 ...

  10. Linux下使用虚拟网卡的ingress流控(入口流控)

    Linux内核实现了数据包的队列机制,配合多种不同的排队策略,可以实现完美的流量控制和流量整形(以下统称流控).流控可以在两个地方实现,分别为egress和ingress,egress是在数据包发出前 ...