博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 开发 PHP 7 扩展之原生常量定义
阅读量:6252 次
发布时间:2019-06-22

本文共 2043 字,大约阅读时间需要 6 分钟。

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

比如 Mysqli 扩展的 Predefined Constants

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

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

#include "zapi/ZendApi.h"extern "C" {ZAPI_DECL_EXPORT void *get_module() {   static zapi::lang::Extension hellozapi("hellozapi", "1.0");   return hellozapi;}}复制代码

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

  1. HELLO_ZAPI_VERSION (int)
  2. HELLO_ZAPI_NAME (string)
  3. HELLO_DEBUG_MODE (bool)
  4. HELLO_ZAPI_PI (double)

zendAPI 常量描述类简单介绍

zendAPI 里面我们使用 zapi::lang::Constant 来描述一个常量的元信息,使用起来很简单,他的构造函数接受两个参数,第一个参数是常量名称,第二个参数是常量的值。例如我们使用下面代码去定义一个 ROOT_DIR 常量, 常量值是 /srv/www

using zapi::lang::Constant;Constant dirConst("ROOT_DIR", "/srv/www");复制代码

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

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

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

PHP Code
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复制代码

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

转载于:https://juejin.im/post/59cc684a6fb9a00a42478731

你可能感兴趣的文章
软件项目如何选型
查看>>
UVa 11205 - The broken pedometer
查看>>
[书目20150727]选择重于一切(扎克伯格给年轻人的37个人生忠告)
查看>>
Apache与Nginx的优缺点比较
查看>>
【第二篇】Volley的使用之加载图片
查看>>
hdu oj1102 Constructing Roads(最小生成树)
查看>>
减少可执行程序size的三个常用软件
查看>>
窥探Swift之别样的枚举类型
查看>>
pyspark简要原则
查看>>
【移动开发】Android中WIFI开发总结(二)
查看>>
idea git merge代码
查看>>
云计算设计模式(二十二)——静态内容托管模式
查看>>
[Angularjs]ng-file-upload上传文件
查看>>
修改类不用重启Tomcat加载整个项目
查看>>
iframe刷新父页面
查看>>
KL46 custom board SWD reset is never asserted - SWS Waveform
查看>>
如何提高团队管理能力1
查看>>
Redmine中使用SVN进行版本管理经验总结
查看>>
【OC语法要闻速览】一、方法调用
查看>>
Oracle 重建索引脚本
查看>>