>本文繼續使用PHP-CPP探索建築PHP擴展,重點是面向對象的功能。 我們將創建一個數字類來說明庫的功能。
為了開始,我們將調整PHP-CPP項目模板。 重命名為Complex
>>>>,然後將其內容更新為
如下:yourtextension.ini
>
complex.ini
extension=complex.so
接下來,我們將定義Makefile
NAME = complex INI_DIR = /etc/php5/cli/conf.d
Complex
密鑰概念:main.cpp
PHP-CPP使用熟悉的C語法簡化了面向對象的PHP擴展。
類展示C和PHP風格的構造函數/破壞者,用於無縫集成。Complex
mod()
add()
>本文提供了配置,編譯和測試PHP擴展的完整指南。 __toString()
>,無返回類型,無參數)。 PHP使用>和。 PHP-CPP都支持:
~
重要點:__construct()
__destruct()
class Complex : public Php::Base { private: double r = 0, i = 0; public: Complex() {} virtual ~Complex() {} Php::Value getReal() { return r; } Php::Value getImage() { return i; } void __construct(Php::Parameters ¶ms) { if (params.size() == 2) { r = params[0]; i = params[1]; } else { r = 0; i = 0; } } // ... other methods ... };
繼承
C和PHP風格的構造函數均已實現。Php::Base
和getReal()
getImage()
記住要mod()
。 PHP-CPP支持特定的成員功能簽名(有關詳細信息,請參見文章)。
方法:
Php::Value mod() const { return (double)sqrt(r * r + i * i); }
<cmath>
添加兩個複數:sqrt()
對於將Aadd()
鑄造到其基礎C對象至關重要。
方法:
Php::Value add(Php::Parameters ¶ms) { Php::Value t = params[0]; Complex *a = (Complex *)t.implementation(); r += (double)a->getReal(); i += (double)a->getImage(); return this; }
用於用戶友好的輸出:t.implementation()
Php::Value
用於字符串操縱。
__toString()
>功能註冊:
註冊課程及其方法:
Php::Value __toString() { std::ostringstream os; os << r; if (i >= 0) os << "+"; os << i << "i"; return os.str(); }
<sstream></sstream>
> 編譯並使用安裝。 使用PHP代碼進行測試(請參閱原始文章以獲取示例)。
>>命名空間封裝:
>將類包裝在名稱空間中(在本示例中trComplex
)需要最小的更改(有關詳細信息,請參見原始文章)。 鑰匙是在get_module()
>函數中調整名稱空間,並使用PHP代碼中的完全資格的名稱。
結論:
以上是PHP擴展開發具有PHP-CPP:面向對象的代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!