php扩展开发2--添加类
1.需要实现的细节
- 实现一个person类
- 实现一个doing方法和saying方法
2.第一个扩展
2.1创建类的扩展:
[root@bogon ext]# cd /usr/local/src/php-7.0.3/ext
[root@bogon ext]# ./ext_skel --extname=person //运行ext_skel创建扩展的开发包
2.2 修改配置
[root@bogon ext]# vim person/config.m4
- dnl PHPARGWITH(person, for person support,
- dnl Make sure that the comment is aligned:
- dnl [ --with-person Include person support])
- 更改为:
- PHPARGWITH(person, for person support,
- dnl Make sure that the comment is aligned:
- [ --with-person Include person support])
- ****dnl 在这是注释的意思。去掉dnl 就是打开 这一行的意思
2.3 实现代码
在php_person.h头中加上
extern zend_class_entry *person_ce;PHP_METHOD(person_ce,__construct); PHP_METHOD(person_ce,saying); PHP_METHOD(person_ce,doing);
在person.c头中加上
/*定义类*/ zend_class_entry *person_ce; /*** 声明构造函数* @param* @return*/ ZEND_METHOD(person,__construct){zend_printf("construct\n"); }/*** 声明析造函数* @param* @return*/ ZEND_METHOD(person,__destruct){zend_printf("destruct\n"); }ZEND_METHOD(person,doing){zend_printf("doing\n");}ZEND_METHOD(person,saying){zend_printf("saying\n");}/*NULL 表示不传参数*
* ZEND_ACC_PUBLIC 说明是public 方法
* ZEND_ACC_CTOR 说明是构造函数* ZEND_ACC_DTOR 说明是析构函数*/ const zend_function_entry person_functions[] = {ZEND_ME(person, __construct,NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)ZEND_ME(person,doing,NULL,ZEND_ACC_PUBLIC) ZEND_ME(person,saying,NULL,ZEND_ACC_PUBLIC)ZEND_ME(person,__destruct,NULL,ZEND_ACC_PUBLIC|ZEND_ACC_DTOR)PHP_FE_END /* Must be the last line in person_functions[] */ };//将类和方法注册到zend PHP_MINIT_FUNCTION(person) {zend_class_entry ce;INIT_CLASS_ENTRY(ce, "person", person_functions);person_ce = zend_register_internal_class(&ce TSRMLS_CC);zend_declare_property_null(person_ce,"saying",strlen("saying"),ZEND_ACC_PUBLIC);zend_declare_property_null(person_ce,"doing",strlen("doing"),ZEND_ACC_PUBLIC);return SUCCESS; }
执行 命令 phpize
./configure
make
make install 或者 手动cp
改更php.ini 加上[person] extenstion=person.so
使用扩展:
[root@bogon tests]# cat test.php <?php$n = new person(); echo $n->saying(); echo $n->doing();[root@localhost tests]# php test.php construct saying doing destruct
该文章参考与:
原链接:http://www.djhull.com/phpext/php-ext-2.html
- 请尊重本人劳动成功,可以随意转载但保留以下信息
- 作者:岁月经年
- 时间:2016年03月
转载于:https://www.cnblogs.com/yhl664123701/p/5310604.html
php扩展开发2--添加类相关推荐
- php扩展调试,5分钟学会PHP扩展开发与断点调试
很多PHPer都有尝试写PHP扩展的经历,但网上现有的扩展开发教程大都晦涩难懂,官方文档更是让人看的云里雾里.无形之中垒高了PHP扩展开发的门槛."每个PHPer都应该抽空看一些PHP扩展的 ...
- 添加类iOS cocos2d 2游戏开发实战(第3版)
这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...
- SuperMap iDesktop Cross 8C 开源桌面GIS下载与扩展开发
2019独角兽企业重金招聘Python工程师标准>>> SuperMap iDesktop Cross 8C 扩展开发的环境配置 工程源码:http://git.oschina. ...
- 第一章 Joomla!扩展开发:概况
第一章 Joomla!扩展开发:概况 你以前开发过动态网站但你的朋友告诉你有关Joomla!的事,所以你决定试一试.从食物网上那些出名的厨师中得到灵感后,你想建立一个简单的关于餐厅的网站.这个网站的安 ...
- 如何扩展开发团队(转)
原文标题:How To Scale a Development Team 原文链接:http://adam.heroku.com/past/2011/4/28/scaling_a_developmen ...
- php7扩展开发教程,Laravel 7 扩展开发教程
下面由Laravel入门教程栏目给大家介绍Laravel 7 扩展开发教程,希望对需要的朋友有所帮助! 步骤 1. 创建一个新项目 我更喜欢使用 Laravel 安装程序.laravel new la ...
- Chrome插件(扩展)开发全攻略(干货)
转载自:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下 ...
- iOS-如何开发一款类 Runkeeper 的跑步应用 (上)
翻译自:https://www.raywenderlich.com/155772/make-app-like-runkeeper-part-1-2 更新提醒: 本教程已由 Richard Critz ...
- UAP扩展开发 - 新增按钮
UAP新增按钮的实现 一.扩展说明 1.按钮扩展的实现有两种方法 - 按钮继承:NCAction,MenuAction - 拦截器实现:ActionInterceptor 此处是通过按钮继承实现的 2 ...
- 谷歌浏览器Chrome插件扩展开发教程
下文是我看到的一篇很好的Chrome扩展开发攻略,感觉很有价值,内容详尽,排版精美,遂转载. 原文由小茗同学发表于小茗同学的博客园:[干货]Chrome插件(扩展)开发全攻略 1. 写在前面 我花了将 ...
最新文章
- AI一分钟 | 小米MIX 2S将于3月27号发布,搭载骁龙845;张朝阳:在研究区块链 但相信AI的力量
- Stanford UFLDL教程 数据预处理
- 第 25 章 OpenManage
- C语言--关于指针两种初始化赋值操作
- 用Kotlin撸一个图片压缩插件-实战篇(三)
- JAVA虚拟机内存分配原则 (转
- vue .prop修饰符
- LVM扩容之xfs文件系统
- 模拟生成随机四位GB2312的汉字验证码(python3.X)
- sentinel卫星_常用的遥感卫星数据(一)哨兵
- 锤子科技或者说罗永浩在泛it行业到社会道德的缺失
- DSPC6657读取图片数据并进行图像处理
- 算法描述---伪代码
- mt管理器主题修改教程_华为微信气泡怎么设置皮肤 微信怎么改猫和老鼠的主题和气泡?...
- Vue-全局websocket 实现消息推送
- 在Mac os上的虚拟机virtual box操作本机连接的USB2.0设备
- OD 的 Run Trace
- mysql中datetime_MySQL datetime类型
- Android项目打包成aar文件并在其他项目引用,作为依赖包
- 了解RS-232、RS-485串口通信协议