大家如果經常閱讀 PHP 官方手冊的話會發現,在擴展那一章里面的每個擴展的介紹的時候,都有一節是 Predefined Constants 預定義常量,這些常量是不需要您在 PHP 里面進行定義就可以使用的。
比如 Mysqli 擴展的 Predefined Constants http://php.net/manual/en/mysqli.constants.php
那么我們必須也在我們 hellozapi 擴展中也定義幾個常量玩玩啊,其實真的很簡單,不信?那咱們走著看。
回到我們上節介紹的定義項目入口代碼:
- #include "zapi/ZendApi.h"
- extern "C" {
- ZAPI_DECL_EXPORT void *get_module()
- {
- static zapi::lang::Extension hellozapi("hellozapi", "1.0");
- return hellozapi;
- }
- }
咱們定義如下幾個常量:(不要太糾結實際意義,哈哈,本身我們的這個擴展都是臆想出來的).
HELLO_ZAPI_VERSION (int)
HELLO_ZAPI_NAME (string)
HELLO_DEBUG_MODE (bool)
HELLO_ZAPI_PI (double)
zendAPI 常量描述類簡單介紹:
在 zendAPI 里面我們使用 zapi::lang::Constant 來描述一個常量的元信息,使用起來很簡單,他的構造函數接受兩個參數,第一個參數是常量名稱,第二個參數是常量的值。例如我們使用下面代碼去定義一個 ROOT_DIR 常量, 常量值是 /srv/www。
using zapi::lang::Constant;
Constant dirConst("ROOT_DIR", "/srv/www");
zapi::lang::Constant API 手冊參考
現在大家學習完背景知識,讓我們擼起袖子寫代碼吧。
- C++ Code
- #include "zapi/ZendApi.h"
- ?using zapi::lang::Constant;
- extern "C" {
- ZAPI_DECL_EXPORT void *get_module()
- {
- static zapi::lang::Extension hellozapi("hellozapi", "1.0");
- ?Constant hellozapiVersionConst("HELLO_ZAPI_VERSION", 0x010002);
- Constant hellozapiNameConst("HELLO_ZAPI_NAME", "Hello zendAPI!");
- Constant helloDebugModeConst("HELLO_DEBUG_MODE", true);
- Constant helloPiConst("HELLO_ZAPI_PI", 3.14);
- hellozapi.registerConstant(std::move(hellozapiVersionConst));
- hellozapi.registerConstant(std::move(hellozapiNameConst));
- hellozapi.registerConstant(std::move(helloDebugModeConst));
- hellozapi.registerConstant(std::move(helloPiConst));
- return hellozapi;
- }
- }
如果您對 std::move 感到陌生,您可以閱讀 cpp reference 手冊
std::move 用戶手冊
怎么樣,就這么幾行,咱們的預定義常量就算定義好了,現在當執行我們 PHP 腳本的時候就可以直接使用了。
- if (defined("HELLO_ZAPI_VERSION")) {
- echo HELLO_ZAPI_VERSION;
- }
- echo "/n";
- if (defined("HELLO_ZAPI_NAME")) {
- echo HELLO_ZAPI_NAME;
- }
- echo "/n";
- if (defined("HELLO_DEBUG_MODE")) {
- if (HELLO_DEBUG_MODE) {
- echo "true";
- } else {
- echo "false";
- }
- }
- echo "/n";
- if (defined("HELLO_ZAPI_PI")) {
- echo HELLO_ZAPI_PI;
- }
- // you will get
- // ?65538
- // Hello zendAPI!
- // true
- // 3.14
好了,到這里我們就把預定義常量就講完了,我沒有騙您吧,真的很簡單,稍作調整讓我們繼續前進.
新聞熱點
疑難解答