PHP-CPP開發擴展(二)

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

實現PHP函數

上面的示例裏其實咱們已經實現了2個PHP函數。接下來,咱們看看PHP-CPP如何實現如下4種函數:開發

  • 無形參無返回值
  • 無形參有返回值
  • 有形參無返回值
  • 有形參有返回值

得益於PHP-CPP封裝的Php::ValuePhp::Parameters類,咱們能夠很簡單的實現上面這些函數。get

Php::Value能夠認爲是PHP的變量,內部封裝了zval結構。經過對運算符的重載,C++裏的變量支持自動轉爲Php::Value類型。博客

一、無形參無返回值io

void func(){}

二、無形參有返回值

Php::Value func(){}

三、有形參無返回值

void func(Php::Parameters &params){}

四、有形參有返回值

Php::Value func(Php::Parameters &params){}

示例:

/**
 * User: 公衆號: 飛鴻影的博客(fhyblog)
 * Date: 2018/7
 */

Php::Value sum_n(Php::Parameters &params)
{
    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),不按期爲您呈現技術乾貨。

相關文章
相關標籤/搜索