PHP-CPP是一個用於開發PHP擴展的C++庫。本節講解PHP輸出和函數的實現。php
上面的helloworld示例裏,咱們使用Php::out
進行輸出,並使用了std::endl
換行刷新緩衝。Php::out
變量實際上是std::ostream
類的一個實例,支持PHP中設置的全部輸出緩衝。它與PHP腳本中的echo()
函數基本相同。ios
幾個經常使用的方法說明:函數
std::flush
顯示刷新緩衝;std::endl
輸出換行並刷新緩衝;Php::out
輸出內容到緩衝;Php::notice
生成一個PHP notice;Php::warning
生成一個PHP warning;Php::deprecated
生成一個PHP deprecated;Php::error
生成一個PHP error對於錯誤,通知和警告,咱們不須要換行符,但咱們仍然必須刷新緩衝區以實際生成輸出。
Php::error
流有一些很是特殊的東西:當你刷新它時,PHP腳本以至命錯誤結束。code
有了上面的幾個方法,咱們就能夠實現PHP的標準輸出功能。blog
使用輸出必須引入
iostream
頭文件。ip
上面的示例裏其實咱們已經實現了2個PHP函數。接下來,咱們看看PHP-CPP如何實現如下4種函數:開發
得益於PHP-CPP封裝的Php::Value
和Php::Parameters
類,咱們能夠很簡單的實現上面這些函數。get
Php::Value
能夠認爲是PHP的變量,內部封裝了zval結構。經過對運算符的重載,C++裏的變量支持自動轉爲Php::Value
類型。博客
一、無形參無返回值io
void func(){}
二、無形參有返回值
Php::Value func(){}
三、有形參無返回值
void func(Php::Parameters ¶ms){}
四、有形參有返回值
Php::Value func(Php::Parameters ¶ms){}
示例:
/** * User: 公衆號: 飛鴻影的博客(fhyblog) * Date: 2018/7 */ Php::Value sum_n(Php::Parameters ¶ms) { int max = 0, sum = 0; if(params.size() == 0){ Php::warning << "miss param" << std::flush; return 0; } max = params[0]; if(params[0].type() != Php::Type::Numeric){ Php::warning << "param type must be numeric." << std::flush; return 0; } for(int i = 1; i <= max; i++){ sum += i; } return sum; }
該函數實現了有形參有返回值,其餘幾種改改就能夠實現。函數裏雖然返回的是C++的int類型變量,可是Php::Value
會自動轉爲PHP語言類型變量。
咱們只須要在get_module()
裏註冊一下:
extension.add<sum_n>("sum_n");
tips: 最終暴露出來的函數名能夠與C++裏函數名不一樣,例如:
extension.add<sum_n>("sum_n2");
也是能夠的。
從新編譯便可:
$ sudo make clean && make && sudo make install
(未完待續)
想第一時間獲取最新動態,歡迎關注關注飛鴻影的博客(fhyblog)
,不按期爲您呈現技術乾貨。