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--添加类相关推荐

  1. php扩展调试,5分钟学会PHP扩展开发与断点调试

    很多PHPer都有尝试写PHP扩展的经历,但网上现有的扩展开发教程大都晦涩难懂,官方文档更是让人看的云里雾里.无形之中垒高了PHP扩展开发的门槛."每个PHPer都应该抽空看一些PHP扩展的 ...

  2. 添加类iOS cocos2d 2游戏开发实战(第3版)

    这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...

  3. SuperMap iDesktop Cross 8C 开源桌面GIS下载与扩展开发

    2019独角兽企业重金招聘Python工程师标准>>> SuperMap iDesktop Cross 8C 扩展开发的环境配置

 工程源码:http://git.oschina. ...

  4. 第一章 Joomla!扩展开发:概况

    第一章 Joomla!扩展开发:概况 你以前开发过动态网站但你的朋友告诉你有关Joomla!的事,所以你决定试一试.从食物网上那些出名的厨师中得到灵感后,你想建立一个简单的关于餐厅的网站.这个网站的安 ...

  5. 如何扩展开发团队(转)

    原文标题:How To Scale a Development Team 原文链接:http://adam.heroku.com/past/2011/4/28/scaling_a_developmen ...

  6. php7扩展开发教程,Laravel 7 扩展开发教程

    下面由Laravel入门教程栏目给大家介绍Laravel 7 扩展开发教程,希望对需要的朋友有所帮助! 步骤 1. 创建一个新项目 我更喜欢使用 Laravel 安装程序.laravel new la ...

  7. Chrome插件(扩展)开发全攻略(干货)

    转载自:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下 ...

  8. iOS-如何开发一款类 Runkeeper 的跑步应用 (上)

    翻译自:https://www.raywenderlich.com/155772/make-app-like-runkeeper-part-1-2 更新提醒: 本教程已由 Richard Critz ...

  9. UAP扩展开发 - 新增按钮

    UAP新增按钮的实现 一.扩展说明 1.按钮扩展的实现有两种方法 - 按钮继承:NCAction,MenuAction - 拦截器实现:ActionInterceptor 此处是通过按钮继承实现的 2 ...

  10. 谷歌浏览器Chrome插件扩展开发教程

    下文是我看到的一篇很好的Chrome扩展开发攻略,感觉很有价值,内容详尽,排版精美,遂转载. 原文由小茗同学发表于小茗同学的博客园:[干货]Chrome插件(扩展)开发全攻略 1. 写在前面 我花了将 ...

最新文章

  1. AI一分钟 | 小米MIX 2S将于3月27号发布,搭载骁龙845;张朝阳:在研究区块链 但相信AI的力量
  2. Stanford UFLDL教程 数据预处理
  3. 第 25 章 OpenManage
  4. C语言--关于指针两种初始化赋值操作
  5. 用Kotlin撸一个图片压缩插件-实战篇(三)
  6. JAVA虚拟机内存分配原则 (转
  7. vue .prop修饰符
  8. LVM扩容之xfs文件系统
  9. 模拟生成随机四位GB2312的汉字验证码(python3.X)
  10. sentinel卫星_常用的遥感卫星数据(一)哨兵
  11. 锤子科技或者说罗永浩在泛it行业到社会道德的缺失
  12. DSPC6657读取图片数据并进行图像处理
  13. 算法描述---伪代码
  14. mt管理器主题修改教程_华为微信气泡怎么设置皮肤 微信怎么改猫和老鼠的主题和气泡?...
  15. Vue-全局websocket 实现消息推送
  16. 在Mac os上的虚拟机virtual box操作本机连接的USB2.0设备
  17. OD 的 Run Trace
  18. mysql中datetime_MySQL datetime类型
  19. Android项目打包成aar文件并在其他项目引用,作为依赖包
  20. 了解RS-232、RS-485串口通信协议

热门文章

  1. 30岁前,一定要完成哪些人生规划?
  2. 解读今年的 Google IO 2017
  3. windows7怎么升级10_最新主板真的无法安装windows7吗?
  4. vscode settings.json配置
  5. kakfa学习教程一
  6. postman的基础使用
  7. break 和 continue
  8. 【夯实PHP基础】PHP的反射机制
  9. android无法创建AVD了?
  10. 不可或缺的PrepareImageRegions函数