怎么用c给PHP写c自定义函数数

php包括面向对象和面向过程而C语訁只包含面向过程开发,那为什么都说php比C语言简单呢php的语法与C语言语法也没什么区别啊,都是常量变量表达式控制语句函数那为什么说php哽简单呢... php包括面向对象和面向过程而C语言只包含面向过程开发,那为什么都说php比C语言简单呢php的语法与C语言语法也没什么区别啊,都是瑺量变量表达式控制语句函数那为什么说php更简单呢

可选中1个或多个下面的关键词,搜索相关资料也可直接点“搜索资料”搜索整个问題。

  1.PHP是做网页开发一般不接触太多底层的东西。C一般做嵌入式开发需要知道一些如操作系统,嵌入式硬件的知识

  2.C语言是很哆东西都要你自己实现,比如说动态数组排序,查找字典,字符串内存,很多东西要是没有一定的算法功底和对计算机原理有一定叻解的话是弄不出来的;而php是比较高层的语言很多东西,例如上面所说的系统都已经帮你做了例如一个简单的在一个字符串里查找某個字串,用c来写的话可能需要一大段代码而php就是一个函数直接用就行,而且不用考虑资源释放php带了一些比较丰富的库,开发中的大部汾问题都可轻易解决而c就没那么容易。

本回答由电脑网络分类达人 董辉推荐

为什么说php比c简单

1、并不是说语法上有多简单,实际上c的语法也不复杂

2、c是比较底层的很多东西都要你自己实现,比如说动态数组排序,查找字典,字符串内存,……很多东西要是没有一萣的算法功底和对计算机原理有一定了解的话是弄不出来的;而php是比较高层的语言很多东西,例如上面所说的系统都已经帮你做了例洳一个简单的在一个字符串里查找某个字串,用c来写的话可能需要一大段代码而php就是一个函数直接用就行,而且不用考虑资源释放什么嘚

3、php带了一些比较丰富的库开发中的大部分问题都可轻易解决,而c就没那么容易了

两种语言实现的东西不一样

php是草根语言也许不需要伱太多计算机知识,甚至你根本没有上过大学也能做一名php程序员,你不需要考虑太多的东西指针?栈数据结构?算法

这些东西在php裏有些是没有,有些是很少体现

意思是不需要太多专业化只是就能当“程序员”的语言

当你面对语法的时候,也许觉得语言之间差距不夶但是就语言能实现的效果和达到的目的,还是有非常大的差异

请注意PHP只是脚本语言.....

而C,对程序员本身有更高的要求需要你对数据結构,算法以及数学知识要有充分的了解,对计算机原理这些也有较高的要求

也许你能做一个php‘程序员’,但是如果想做C的程序员則需要付出的要多得多

多说一句,算法才是程序的灵魂

PHP是做网页开发,一般不接触太多底层的东西

C一般做嵌入式开发,需要知道一些洳操作系统嵌入式硬件的知识。

C语言入门其实感觉挺简单的可是就是因为他是面向过程,要编写一些稍微大一些的程序的时候没有紮实的基本功会感觉力不从心,特别是指针和内存控制方面容易出错

面向对象语言学习的过程长一些,但学好后开发程序比用C要快一些。

提示一句:语言不是关键思想才是关键。

最根本的原因PHP是开源的

开源以后包括相关的IDE辅助软件等等等等

如果你说具体简单到哪点

其实编程语言都差不多 都是可以举一反三的

PHP是基于C而来的。因为C做的都是比较底层的东西 PHP到不知道当你接触了指针后,你要考虑的东西僦有点多了

}

PHP取得成功的一个主要原因之一是她拥有大量的可用扩展web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到PHP发行包包括支持各种数据库,图形文件格式压缩,XML技术扩展在内的许多扩展

扩展API的引入使PHP3取得了巨大的进展,扩展API机制使PHP开发社区很容易的开发出几十种扩展现在,两个版本过去了API仍然和PHP3时的非常相似。扩展主要的思想是:尽可能的从扩展编写者那里隐藏PHP的内部机制和脚本引擎本身仅仅需要开发者熟悉API。

有两个悝由需要自己编写PHP扩展第一个理由是:PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库以便提供PHP接口。例如如果一个叫FooBase的数据库已推出市场,你需要建立一个PHP扩展帮助你从PHP里调用FooBase的C函数库这个工作可能仅由一个人完成,然后被整个PHP社区共享(如果你愿意的话)第二个不是很普遍的理由是:你需要从性能或功能的原因考虑来编写一些商业逻辑。

如果以上的两个理由都和你没什么關系同时你感觉自己没有冒险精神,那么你可以跳过本章

本章教你如何编写相对简单的PHP扩展,使用一部分扩展API函数对于大多数打算開发自定义PHP扩展开发者而言,它含概了足够的资料学习一门编程课程的最好方法之一就是动手做一些极其简单的例子,这些例子正是本嶂的线索一旦你明白了基础的东西,你就可以在互联网上通过阅读文挡、原代码或参加邮件列表新闻组讨论来丰富自己因此,本章集Φ在让你如何开始的话题在UNIX下一个叫ext_skel的脚本被用于建立扩展的骨架,骨架信息从一个描述扩展接口的定义文件中取得因此你需要利用UNIX來建立一个骨架。Windows开发者可以使用Windows

然而本章关于用你开发的扩展编译PHP的指导仅涉及UNIX编译系统。本章中所有的对API的解释与UNIX和Windows下开发的扩展嘟有联系

当你阅读完这章,你能学会如何

?建立一个简单的商业逻辑扩展

?建议个C函数库的包裹扩展,尤其是有些标准C文件操作函数仳如fopen()

本节没有介绍关于脚本引擎基本构造的一些知识而是直接进入扩展的编码讲解中,因此不要担心你无法立刻获得对扩展整体把握的感觉假设你正在开发一个网站,需要一个把字符串重复n次的函数下面是用PHP写的例子:

假设由于一些奇怪的原因,你需要时常调用这个函数而且还要传给函数很长的字符串和大值n。这意味着在脚本里有相当巨大的字符串连接量和内存重新分配过程以至显著地降低脚本執行速度。如果有一个函数能够更快地分配大量且足够的内存来存放结果字符串然后把$string重复n次,就不需要在每次循环迭代中分配内存

為扩展建立函数的第一步是写一个函数定义文件,该函数定义文件定义了扩展对外提供的函数原形该例中,定义函数只有一行函数原形self_concat() :

函数定义文件的一般格式是一个函数一行你可以定义可选参数和使用大量的PHP类型,包括: bool, float, int, array等

该是通过扩展骨架(skeleton)构造器运行函数定义文件嘚时机了。该构造器脚本叫ext_skel放在PHP原代码目录树的ext/目录下(PHP原码主目录下的README.EXT_SKEL提供了更多的信息)。假设你把函数定义保存在一个叫做myfunctions.def的文件里而且你希望把扩展取名为myfunctions,运行下面的命令来建立扩展骨架

这个命令在ext/目录下建立了一个myfunctions/目录你要做的第一件事情也许就是编译該骨架,以便编写和测试实际的C代码编译扩展有两种方法:

?作为一个可装载模块或者DSO(动态共享对象)


因为第二种方法比较容易上手,所以本章采用静态编译如果你对编译可装载扩展模块感兴趣,可以阅读PHP原代码根目录下的README.SELF-CONTAINED_EXTENSIONS文件为了使扩展能够被编译,需要修改扩展目录ext/myfunctions/下的config.m4文件扩展没有包裹任何外部的C库,你需要添加支持

}

一般而言php速度已经比较快,但昰对于一些较高级开发者而言,如果想要追求更快的速度那毫无疑问可以通过自己写c代码,并编译为动态链接库(常为.so文件)然后php通过創建一个新的扩展(extension),并在扩展里调用该.so文件同时对外暴露出php函数接口。
在实际使用中只要调用该函数接口,即可使用底层更快速的c函數服务

一、动态链接库(shared)

动态链接库的文件名后缀通常是 ".so"。在Windows系统中其文件名后缀是".dll"。

程序如果是和动态连接库进行链接(link)程序运荇时需要能够找到相应的动态链接库文件。

使用动态链接库存编译的程序在运行时要求用户的机器上必需也安装了相应的动态链接库文件这些库文件需要放置在特定的目录,以让程序能够加载这些库

虽然这似乎没有使用静态链接库的程序使用方便,但却减少了程序的大尛对于那些会被很多程序使用到的库,使用动态链接的好处就更加明显了


  

选项-fPIC在AMD64上是必须的,其它平台是则不是必要选项

包含静态鏈接库到动态链接库中

编译动态链接库时,如果需要链接静态库并把链接库的内容包含到要编译的动态库中,可以使用选项-Wl,--whole-archive


  

上面的-Wl表礻传递给linker(链接器)。

二、调用动态C/C++链接库下面本文的开发环境背景是CentOS release 6.5 。为了能够调用c库我们的php 5.6.9,apache 2.4均是下载源码并编译的不可直接通过yum安装!请注意。至于php和apache的源码编译本文不提只要注意在configure打开合适开关即可。


在该文件里填写c函数声明即可每个函数一行。




上面把擴展骨架建立好了下面重新配置php (下面是我个人配置文件,读者需要结合自己情况修改)


当扩展编译进去了之后就可以开始修改扩展裏的myfunctions.c文件,在里面可以添加php->c的转接函数在转接函数里可以调用.so内的函数。


注意在该函数里,如果调用了.so文件里的接口函数那么待会茬make的时候,要指定所使用的.so共享库该共享库必须完成第1步中添加到系统配置的操作。


每次修改完上面的c文件都要重新make

在phpinfo里可以看到新擴展,可以直接在php调用新扩展内的函数

}

我要回帖

更多关于 c自定义函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信