`
tubaluer
  • 浏览: 1444427 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

用c/c++写php扩展模块的杂想

 
阅读更多

我们知道:php支持c/c++写的扩展模块。原因无他,因为php底层本质上就是c实现的,既然人家zend可以用c来实现现在php的这么多功能函数,我们当然也可以了。这一篇博文不会讨论如何去实现这样一个扩展,只是分析一下原理和优缺点以及一些杂想。

1:为什么要写扩展呢?比如我要实现一个功能,我完全可以用php来书写封装一个函数,这样足矣。为什么要这么费劲的去用c去扩展一个模块呢?好吧,你想:我用c语言去封装一个函数,和用汇编去实现同样功能的一个函数,你觉得哪个效率高?不言而喻,c实现的函数效率必然要比php的高。 在这一点上:很多人会有一个误区,包括我自己原先也以为: 我用c/c++扩展实现了一个功能函数。在php中执行的时候不是一样也要:先编译生成opcode,然后再执行将其处理?这样一来:前一个编译的过程根本没有任何省略啊?这个效率高谈何说起? 注意了:这里所说的高效率并不是从执行流程上来说的,无论是原本的源码,还是你自己写的扩展,其都要先编译后执行,这个效率上区别不大(当然也是有区别的),真正导致效率不同的地方是:你用php来实现一个函数,是直接把这个函数体写在php中,而用c/c++来扩展一个模块的话:你在php中只需要调用一下这个函数即可! 一个是只有一句函数调用,一个是整个函数体,编译成opcode的工作量:后者是前者的n个数量级倍!更别提后边的执行过程了。所以效率的区别就在于:最开始的编译数量多少。

当然了,还有另外一个理由就是扩展你的php功能,比如说:出现一种新的数据库,其已经放出了使用的c库,但是php还不支持,这个时候我们就可以开发一个模块来让php支持他。

2:那写一个扩展复杂不复杂呢?php本身已经为你的扩展提供了框架,类似mfc或者qt那样,你要做的只是找到框架中对应的位置去添加代码实现你的功能,然后重新编译下php源码即可!当然了:你要实现自己的功能,是需要使用php提供的一些系统函数的。可能你会说了:我为什么不可以使用标准c的一些函数呢?当然:你完全可以使用,而且php扩展框架对大部分c标准函数都完全支持。但是对于类似malloc这种内存管理函数的使用就完全不同了。这是因为:php在内存管理上使用了内存池!如果你对内存池原理很了解的话就明白:php为什么不用malloc而使用自己封装过后的内存分配函数了。所以:最好能用php的系统函数就用系统函数,否则:一很容易出现内存泄露二php原本做的一些优化你都无法使用。

3:杂想:知道php的c/c++扩展实现原理后,我就开始幻想:那是不是可以把qt的所有函数库当做一个模块给加载进去呢?我觉得这事完全靠谱。这样的话就很有意思了:用户可以在浏览器中请求去建一个QWidget,而后server把这个widget的信息或者解析过后的样式直接返回给用户浏览器····以前有朋友给我设想:未来可以在浏览器中打魔兽··哈哈,这个完全可以啊! 不过如此一来:客户端这种概念会越来越淡化了。而且浏览器也得支持这种qt的数据类型和格式。不过html这东西也很不错,完全可以用他取代ui库。但是如此一来:浏览器的地位就显得如此重要了,以后会不会之间简化浏览器的样式使其不再单纯是一个应用程序,而是一个server这样的概念,用户可以随处使用它呢?这样一来:云计算和云存储就真的实现了!!狂想,狂想······O(∩_∩)O~

分享到:
评论

相关推荐

    PHP基础教程 是一个比较有价值的PHP新手教程!

    如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。 2.5 变量与常量 可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用...

    合格的PHP程序员必备技能

    往往需要自己写php扩展。使用mysql自然想很多常见的,性能瓶颈要能有很好的解决方案。mysql 插件编写,apache模块编写。联系起来结合点还是要会c。 倘若是做中间层和前端工作则要求对css,javascript要求比较高。...

    PHP高手需要要掌握的知识点

    往往需要自己写php扩展。使用mysql自然想很多常见的,性能瓶颈要能有很好的解决方案。mysql 插件编写,apache模块编写。联系起来结合点还是要会c。 倘若是做中间层和前端工作则要求对css,javascript要求比较高。...

    Python 2.5

    语言扩展可以用C、C++或Java为Python编写新的新言模块,如函数。或者与Python直接编译在一起,或者采用动态库装入方式实现。也专门有人编写了一个工具,可以实现为Python自动实现函数接口封装,这就是SWIG...

    基于C语言实现无线遥控接收模块实验(含源代码+使用说明).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    CnWizards V0.9.0.470

    + 函数过程列表增加对 C/C++ 的类的支持,以及其它更新。 * 清理引用单元增加对 Delphi 2009 的支持。 * 编辑器浮动工具按钮修补一处快捷键失效的问题。 * 浮动工具条躲开 Delphi 2009 下一处 VCL Bug 引发的失去...

    foolsock:用于Socket持久连接PHP RPC

    PHP很多项目随着业务规模的增长(尤其是终端众多的情况下)逐渐向服务化演变,常见的一种架构模型是将相对独立或者比较耗时的业务抽象为单独的服务(如用户模块)使用c/c++、golang等更高效的语言处理,具体的业务层(如:...

    无线遥控接收模块实验_单片机C语言实例(纯C语言源代码).zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    (完整word版)python3基础教程.doc

    可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法 ,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。 8.数据库:Python提供所有主要的商业数据库的接口。 9。GUI编程:...

    面向对象程序设计六大原则

    即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 2)满足“开-闭”原则的系统的优点 a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性...

    毕设&课设&项目&实训-基于51单片机(STC89C52)和指纹识别模块(AS608)的指纹锁项目的全部软硬件资料.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    W3C组织正在研究一种名为RDF(Resource Description Framework)的metadata处理方法,可以自动交换信息,W3C宣称,使用RDF配合数字签名,将使网络中存在"真实可信"的电子商务。 六.显示 单独用XMl不能显示页面,...

    Eclipse插件

    eclipse最为常见的开发语种有java、c、c++、php等,在其官网上根据不同开发语种选择不同的基本版,本例程中我们选用的是以java为基本语种的开发版本,来对eclipse的插件的几种安装方式进行说明,其他版本的安装方式...

Global site tag (gtag.js) - Google Analytics