是否有可能编写一些C或C ++代码并编译为二进制文件,然后使用这些二进制文件与PHP?是否也可以使用C和C ++编写php库?
如果是这样,请告诉我该怎么办?
答案 0 :(得分:14)
PHP在设计上是模块化的 - 它由“引擎”和许多扩展组成,其中一些是必不可少的(例如“标准”扩展),有些是可选的。它们可以动态编译或加载(通过php.ini设置或dl()
函数)。
如果您愿意学习API,可以在C / C ++中轻松编写自己的PHP扩展。从有关如何"hack the Zend Engine"。
的文档开始答案 1 :(得分:12)
您可能需要查看SWIG,这是一个包装库的通用工具,以便可以从各种语言中调用它们。 SWIG支持PHP,Perl和Lua(我个人使用的目标)也是如此。引自SWIG website的功能列表:
SWIG目前生成包装代码 对于十八个不同的目标 语言:
- Allegro CL
- C#
- CFFI
- CLISP
- 鸡
- 狡诈
- 爪哇
- 的Lua
- Modula一3
- 的MzScheme
- OCAML
- 八度
- 的Perl
- PHP
- 的Python
- - [R
- 红宝石
- 的Tcl
- UFFI
除此之外,解析树 可以导出为XML和Lisp s表达式。实验工作是 也可用于派克模块。
它的一些功能依赖于每种语言包装器生成器中的后端支持,但通常它提供了易于使用的包装器,用于将所有普通数据值类型传入和传出函数。在目标语言具有概念的情况下,它通常也可以映射对象模型。
答案 2 :(得分:7)
您可以使用system()函数在php中使用C ++编译的代码,并通过操作系统调用您的程序(就像在命令行中一样)。
答案 3 :(得分:3)
可以用C ++编写php扩展(但你也必须编写C facade)。这不是微不足道的,而且我会说,如果你要求而不是查看PHP代码,你就不太熟悉C以及PHP如何在里面工作,并且由于它的文档很糟糕,对你来说这是一个坏主意用C语言编写库。
编辑:有一些关于zend的基本教程。 http://devzone.zend.com/node/view/id/1021,正如我正在调查的那样,也许自PHP时代以来文档发生了变化:)答案 4 :(得分:3)
您可以使用几乎任何语言编写扩展,并通过动态链接库与PHP一起使用。
答案 5 :(得分:2)
您可以构建php可以加载的共享对象扩展。在http://devzone.zend.com/node/view/id/1021
上有一个简短的教程答案 6 :(得分:1)
您可以使用C / C ++编写代码并将其编译为EXE。然后你可以调用exec();来自PHP并执行代码。
答案 7 :(得分:0)
PHP正在从预构建的库中调用函数来完成许多工作。如果您有一个用C或C ++编写的自己的库,您可以为它创建PHP绑定,然后像其他任何PHP函数一样从其余的PHP代码中调用它。
以Mcrypt函数为例,这只是libMyCrypt库的PHP包装器。
有趣的是,“因为它在企业应用程序中真的需要”。 PHP当前库集中缺少什么?