资讯专栏INFORMATION COLUMN

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

syoya / 2758人阅读

摘要:比如扩展的那么我们必须也在我们扩展中也定义几个常量玩玩啊,其实真的很简单,不信那咱们走着看。好了,到这里我们就把预定义常量就讲完了,我没有骗您吧,真的很简单,稍作调整让我们继续前进原文链接开发扩展之定义常量

大家如果经常阅读 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 脚本的时候就可以直接使用了。

PHP Code
if (defined("HELLO_ZAPI_VERSION")) {
    echo HELLO_ZAPI_VERSION;
}
echo "
";
if (defined("HELLO_ZAPI_NAME")) {
    echo HELLO_ZAPI_NAME;
}
echo "
";
if (defined("HELLO_DEBUG_MODE")) {
    if (HELLO_DEBUG_MODE) {
        echo "true";
    } else {
        echo "false";
    }
}
echo "
";
if (defined("HELLO_ZAPI_PI")) {
    echo HELLO_ZAPI_PI;
}
// you will get
// 65538
// Hello zendAPI!
// true
// 3.14

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

原文链接: C++ 开发 PHP 7 扩展之定义常量

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25962.html

相关文章

  • C++ 开发 PHP 7 扩展原生常量定义

    摘要:大家如果经常阅读官方手册的话会发现,在扩展那一章里面的每个扩展的介绍的时候,都有一节是预定义常量,这些常量是不需要您在里面进行定义就可以使用的。比如扩展的那么我们必须也在我们扩展中也定义几个常量玩玩啊,其实真的很简单,不信那咱们走着看。 大家如果经常阅读 PHP 官方手册的话会发现,在扩展那一章里面的每个扩展的介绍的时候,都有一节是 Predefined Constants 预定义常量...

    zilu 评论0 收藏0
  • C++ 开发 PHP 7 扩展原生函数定义

    摘要:第一步打开项目下的文件,在文件中输入我们的函数的原型声明代码。这行代码注册一个原型为的函数,当这个函数被执行的时候,我们的函数将被运行时调用。原文地址开发扩展之原生函数定义 在上一篇中我们在hellozapi扩展中我们定义了几个常量,但是一个有用的扩展,必须得有函数,没有函数的扩展啥用没有,如果您觉得定义函数很难的话,您又错了,zendAPI就是为了让您生活变得美好而生的,而不会让事情...

    asce1885 评论0 收藏0
  • C++ 开发 PHP 7 扩展模块入口定义

    摘要:每一个扩展必须有一个描述对象,在中我们类主要的作用主要完成这个功能。表示我们扩展导出符号给其他库使用。文章使用的编程文档的引用连接参考手册参考手册原文链接开发扩展之模块入口定义 zendAPI 项目不提供任何底层的功能,只是封装了 zend engine 提供的功能,对上提供一个易用的编程接口。这篇文章中,我们将介绍 C++ 世界与 C 世界交汇的地方,在这里也是 zendAPI 的接...

    dabai 评论0 收藏0
  • PHP面试常考内容面向对象(2)

    摘要:继上一篇面试常考内容之面向对象发表后,今天更新,需要的可以直接点击文字进行跳转获取。析构函数,当对象被销毁时调用。 PHP面试专栏正式起更,每周一、三、五更新,提供最好最优质的PHP面试内容。继上一篇PHP面试常考内容之面向对象(1)发表后,今天更新(2),需要(1)的可以直接点击文字进行跳转获取。整个面向对象文章的结构涉及的内容模块有: 一、面向对象与面向过程有什么区别?二、面向对...

    Barry_Ng 评论0 收藏0
  • PHP扩展开发教程5 - 扩展函数的参数类型(1)

    摘要:前面两节介绍了如何用编写常用的扩展函数,扩展类。对怎么使用开发扩展应该已经很熟悉了,下面晋级学习一下关于扩展函数参数类型方面的内容。 PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。本教程系列在linux下面开发(推荐使用centos),php版本用的...

    DoINsiSt 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<