当前位置:首页 > PHP教程 > php高级应用 > 列表

C++开发PHP 7扩展之定义常量

发布:smiling 来源: PHP粉丝网  添加日期:2018-05-20 18:14:26 浏览: 评论:0 

大家如果经常阅读 PHP 官方手册的话会发现,在扩展那一章里面的每个扩展的介绍的时候,都有一节是 Predefined Constants 预定义常量,这些常量是不需要您在 PHP 里面进行定义就可以使用的。

比如 Mysqli 扩展的 Predefined Constants http://php.net/manual/en/mysqli.constants.php

那么我们必须也在我们 hellozapi 扩展中也定义几个常量玩玩啊,其实真的很简单,不信?那咱们走着看。

回到我们上节介绍的定义项目入口代码:

 
  1. #include "zapi/ZendApi.h" 
  2.  
  3. extern "C" { 
  4.  
  5. ZAPI_DECL_EXPORT void *get_module()  
  6.    static zapi::lang::Extension hellozapi("hellozapi""1.0"); 
  7.    return hellozapi; 
  8.  

咱们定义如下几个常量:(不要太纠结实际意义,哈哈,本身我们的这个扩展都是臆想出来的).

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 手册参考

现在大家学习完背景知识,让我们撸起袖子写代码吧。

  1. C++ Code 
  2. #include "zapi/ZendApi.h" 
  3.  
  4. using zapi::lang::Constant; 
  5.  
  6. extern "C" { 
  7.  
  8. ZAPI_DECL_EXPORT void *get_module()  
  9.    static zapi::lang::Extension hellozapi("hellozapi""1.0"); 
  10.    Constant hellozapiVersionConst("HELLO_ZAPI_VERSION", 0x010002); 
  11.    Constant hellozapiNameConst("HELLO_ZAPI_NAME""Hello zendAPI!"); 
  12.    Constant helloDebugModeConst("HELLO_DEBUG_MODE", true); 
  13.    Constant helloPiConst("HELLO_ZAPI_PI", 3.14); 
  14.    hellozapi.registerConstant(std::move(hellozapiVersionConst)); 
  15.    hellozapi.registerConstant(std::move(hellozapiNameConst)); 
  16.    hellozapi.registerConstant(std::move(helloDebugModeConst)); 
  17.    hellozapi.registerConstant(std::move(helloPiConst)); 
  18.    return hellozapi; 
  19.  

如果您对 std::move 感到陌生,您可以阅读 cpp reference 手册

std::move 用户手册

怎么样,就这么几行,咱们的预定义常量就算定义好了,现在当执行我们 PHP 脚本的时候就可以直接使用了。

  1. if (defined("HELLO_ZAPI_VERSION")) { 
  2.     echo HELLO_ZAPI_VERSION; 
  3. echo "\n"
  4. if (defined("HELLO_ZAPI_NAME")) { 
  5.     echo HELLO_ZAPI_NAME; 
  6. echo "\n"
  7. if (defined("HELLO_DEBUG_MODE")) { 
  8.     if (HELLO_DEBUG_MODE) { 
  9.         echo "true"
  10.     } else { 
  11.         echo "false"
  12.     } 
  13. echo "\n"
  14. if (defined("HELLO_ZAPI_PI")) { 
  15.     echo HELLO_ZAPI_PI; 
  16. // you will get 
  17. // 65538 
  18. // Hello zendAPI! 
  19. // true 
  20. // 3.14 

好了,到这里我们就把预定义常量就讲完了,我没有骗您吧,真的很简单,稍作调整让我们继续前进.

Tags: C++ 常量

分享到: