PHP-CPP開發擴展(一)

PHP-CPP是一個用於開發PHP擴展的C++庫。PHP-CPP提供了一系列完善的文檔、易於使用和擴展的類,讓你能夠相對快速的建立PHP的原生擴展。php

系列筆記:html

爲何使用PHP-CPP

  • 很快
    用C++編寫的代碼很快:比用PHP編寫的代碼快得多。
  • 簡單
    用C++編寫的算法看起來幾乎與用PHP編寫的算法相同。若是你知道如何用PHP編程,你能夠很容易地學習如何在C++中作一樣的事情。實際上,PHP和大多數PHP函數名的語法都直接來自C和C++語法。
  • 無需Zend引擎知識
    Zend引擎的內部結構過於複雜,Zend引擎的代碼很亂,並且大部分都沒有記錄。
  • 完善的文檔
  • 支持全部重要的PHP功能
    使用PHP-CPP,你能夠像使用普通的PHP腳本同樣輕鬆地處理變量、數組、函數、對象、類、接口、異常和命名空間。除此以外,你還可使用C++的全部功能,包括線程,lambdas和異步編程。
  • 免費的
    PHP-CPP是一種開源技術,可供你無償使用。

環境準備

GCC版本不能過低,由於須要支持c++11特性。我使用的版本:ios

gcc version 7.2.0

若是你是CentOS的系統,可能GCC版本最高就是4.4.7,這時候只能經過手動編譯從新安裝了。c++

官方文檔:http://www.php-cpp.com/documentation/git

安裝PHP-CPP

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

Hello World

能夠先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),不按期爲您呈現技術乾貨。

相關文章
相關標籤/搜索