用C ++扩展PHP?
我有一个用PHP编写的性能密集型例程,我希望将其移植到C ++中以提高性能。 有没有什么办法来编写插件或扩展或使用C ++和从PHP接口? 没有手动编辑实际的PHP源代码?
我在SWIG的帮助下用C ++编写了一个PHP插件。 这是可行的,但是可能需要一段时间才能适应SWIG编译周期。 您可以从PHP的SWIG文档开始。
  更新 
 正如@从此处提到的,我极力推荐您获得“ 扩展和embeddedPHP ”一书。 几乎没有任何文档可以在网上find(至less在2008年底,2009年初我没有使用我的PHP插件)。 我不得不依靠这本书。 尽pipe有时Google Code Search有助于查找示例代码。 
Remus说 ,你可以使用Zend API用C / C ++来扩展PHP。 Sara Golemon的链接教程是一个很好的开始,同一作者的“ 扩展和embeddedPHP ”一书涵盖了更详细的主题。
但是,值得注意的是,这些(以及我在网上find的其他几乎所有东西)都集中在C上,并没有真正涵盖C ++扩展需要做的一些调整。
在config.m4文件中,您需要明确链接到C ++标准库: 
 PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD) 
 在config.m4文件中的任何C ++库编译检查也需要链接C ++ lib: 
 PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,, [ AC_MSG_ERROR([lib $LIBNAME not found.]) ],[ -lstdc++ -ldl ]) 
编辑 – 这里是如何指定g ++:
 最后,也是最重要的一点,为了在构build扩展时selectC ++而不是C编译器/链接器, PHP_NEW_EXTENSION()的第6个参数应该是"yes" 。 即: 
 PHP_NEW_EXTENSION(your_extension, your_extension.cpp, $ext_shared, , "-Wall -Werror -Wno-error=write-strings -Wno-sign-compare", "yes") 
从PHP构build系统手册 ,参数是:
- 扩展名
- 所有属于扩展名的源文件列表。
-   (可选) $ext_shared,当调用PHP_ARG_WITH()时,由configuration确定的值
- (可选)“SAPI类”,仅对需要CGI或CLI SAPI的扩展特别有用。 在所有其他情况下,它应该是空的。
- (可选)在构build扩展时添加到CFLAGS的标志列表。
- (可选)一个布尔值,如果“是”,将强制使用$ CXX而不是$ CC构build整个扩展。
  我不能解决如何获得configuration脚本来设置g ++作为编译器/链接器,而不是gcc,所以最后用sed命令攻击了Makefile以在我的bash构build脚本中执行searchreplace: 
 phpize ./configure --with-myextension if [ "$?" == 0 ]; then # Ugly hack to force use of g++ instead of gcc # (otherwise we'll get linking errors at runtime) sed -i 's/gcc/g++/g' Makefile make clean make fi 
大概有一个automake命令会使这个黑客不必要的。
PHP本身是一个松散相关的库的集合。 请参阅http://devzone.zend.com/article/1021了解如何编写自己的教程。;