Расширение PHP с C ++?

У меня есть высокопроизводительная подпрограмма, написанная на PHP, которую я хотел бы перенести на C ++ для повышения производительности. Есть ли способ написать плагин или расширение или что-то с использованием C ++ и интерфейс с ним из PHP? БЕЗ ручного редактирования фактического исходного кода PHP?

Ответы на вопрос(3)

http://devzone.zend.com/article/1021 для учебника, как написать свой собственный.

SWIG, Это выполнимо, но может потребоваться некоторое время, чтобы привыкнуть к циклу компиляции SWIG. Вы можете начать сSWIG документы для PHP.

Update
Как уже упоминалось @therefromhere, я настоятельно рекомендую вам получить книгуРасширение и встраивание PHP, В сети почти нет документации (по крайней мере, в конце 2008 года, в начале 2009 года, когда я сделал свой плагин PHP). Я должен был положиться на книгу во всем. Хотя иногда Google Code Search полезен для поиска примера кода.

Ремус говоритВы можете расширить PHP с C / C ++, используя Zend API. Связанный учебник поСара Големон это хорошее начало, и книгаРасширение и встраивание PHP тем же автором освещает эту тему гораздо подробнее.

Тем не менее, стоит отметить, что оба из них (и в значительной степени все остальное, что я нашел в Интернете) сосредоточены на C и не затрагивают некоторые хитрости, которые необходимы для работы расширений C ++.

вconfig.m4 файл, который необходимо явно указать на стандартной библиотеке C ++:

PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD)

Любые проверки компиляции библиотеки C ++ вconfig.m4 файл также потребует ссылки на C ++ lib:

PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,,
[
  AC_MSG_ERROR([lib $LIBNAME not found.])
],[
  -lstdc++ -ldl
])
EDIT - and here's how to specify g++:

И наконец, что не менее важно, чтобы при компиляции расширения выбирать компилятор / компоновщик C ++, а не компилятор C,6th параметр дляPHP_NEW_EXTENSION() должно быть"yes", то есть:

PHP_NEW_EXTENSION(your_extension,
                  your_extension.cpp, 
                  $ext_shared, 
                  ,
                  "-Wall -Werror -Wno-error=write-strings -Wno-sign-compare",
                  "yes")

ОтРуководство по сборке системы PHPПараметры:

The name of the extension List of all source files which are part of the extension. (optional) $ext_shared, a value which was determined by configure when PHP_ARG_WITH() was called for (optional) "SAPI class", only useful for extensions which require the CGI or CLI SAPIs specifically. It should be left empty in all other cases. (optional) A list of flags to be added to CFLAGS while building the extension. (optional) A boolean value which, if "yes", will force the entire extension to be built using $CXX instead of $CC.

I couldn't work out how to get the configure script to set g++ as the compiler/linker instead of gcc, so ended up hacking the Makefile with a sed command to do a search replace in my bash build script:

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

Presumably there's an Automake команда, которая сделает этот хак ненужным.

ВАШ ОТВЕТ НА ВОПРОС