用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~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值