PHP-CPP是一個用於開發PHP擴展的C++庫。PHP-CPP提供了一系列完善的文檔、易於使用和擴展的類,讓你能夠相對快速的建立PHP的原生擴展。php
系列筆記:html
GCC版本不能過低,由於須要支持c++11特性。我使用的版本:ios
gcc version 7.2.0
若是你是CentOS的系統,可能GCC版本最高就是4.4.7,這時候只能經過手動編譯從新安裝了。c++
官方文檔:http://www.php-cpp.com/documentation/git
PHP-CPP區分PHP5和7系列,可是對外提供的API是同樣的。github
PHP5:算法
$ git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git
PHP7:編程
$ git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP.git
而後編譯安裝:數組
$ make $ sudo make install
能夠先clone下面這個例子來嚐鮮:異步
git clone https://github.com/elvisszhang/phpcpp_helloworld.git
進入helloworld源碼目錄,打開main.cpp,能夠看到以下代碼結構:
/** * User: 公衆號: 飛鴻影的博客(fhyblog) * Date: 2018/7 */ #include <phpcpp.h> #include <iostream> //這是PHP裏面能夠調用的接口函數 void say_hello() { //輸出一段歡迎文字 Php::out << "hello world from my first extension" << std::endl; } /** * 告訴編譯器get_module是個純C函數 */ extern "C" { /** * 本函數在PHP進程一打開就會被訪問,並返回一個描述擴展信息的PHP結構指針 */ PHPCPP_EXPORT void *get_module() { // 必須是static類型,由於擴展對象須要在PHP進程內常駐內存 static Php::Extension extension("helloworld", "1.0.0"); //這裏能夠添加你要暴露給PHP調用的函數 extension.add<say_hello>("say_hello"); // 返回擴展對象指針 return extension; } }
PHP-CPP庫定義了一個PHPCPP_EXPORT
宏,它應該放在get_module()
函數的前面。此宏確保get_module()
函數是公共導出的,所以可由PHP調用。宏具備基於編譯器和操做系統的不一樣實現。
編譯這個擴展很簡單,在終端命令行下輸入make命令便可:
$ make g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp g++ -shared -o helloworld.so main.o -lphpcpp $ sudo make install
編譯完成會在源碼目錄下看到 helloworld.so 這個擴展文件。而後在php.ini文件添加擴展:
extension = helloworld.so
輸入:
php -m | grep helloworld
就能夠看到擴展。
測試源碼目錄下有個test.php,執行:
$ php test.php hello world from my first extension
(未完待續)
想第一時間獲取最新動態,歡迎關注關注飛鴻影的博客(fhyblog)
,不按期爲您呈現技術乾貨。