如果你经常阅读PHP官方手册,你会发现在扩展章节中介绍每个扩展时,都有一个叫做PredefinedConstants的部分。这些常量无需在PHP中定义即可使用。例如,Mysqli扩展的预定义常量http://php.net/manual/en/mysqli.constants.php然后我们还必须在我们的hellozapi扩展中定义一些常量以供娱乐。其实很简单,你不相信吗?那我们去看看吧。回到上一节介绍的定义项目入口代码:#include"zapi/ZendApi.h"extern"C"{ZAPI_DECL_EXPORTvoid*get_module(){staticzapi::lang::Extensionhellozapi("hellozapi","1.0");returnhellozapi;}}下面定义常量:(不要太纠结实际含义,哈哈,我们的扩展都是虚构的)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。使用zapi::lang::Constant;ConstantdirConst("ROOT_DIR","/srv/www");zapi::lang::ConstantAPI手册参考背景知识大家都了解了,下面我们就撸起袖子开始写代码吧。C++代码#include"zapi/ZendApi.h"usingzapi::lang::Constant;extern"C"{ZAPI_DECL_EXPORTvoid*get_module(){staticzapi::lang::Extensionhellozapi("hellozapi","1.0");常量hellozapiVersionConst("HELLO_ZAPI_VERSION",0x010002);常量hellozapiNameConst("HELLO_ZAPI_NAME","HellozendAPI!");常量helloDebugModeConst("HELLO_DEBUG_MODE",true);(std::move(hellozapiVersionConst));hellozapi.registerConstant(std::move(hellozapiNameConst));hellozapi.registerConstant(std::move(helloDebugModeConst));hellozapi.registerConstant(std::move(helloPiConst));returnhellozapi;}}如果你对std::move不熟悉,可以看看cpp参考手册std::move的用户手册怎么样,就那么几行,我们预定义的常量就定义好了,现在我们执行我们的PHP脚本的时候可以直接使用。PHP代码{如果(HELLO_DEBUG_MODE){回声“真”;}else{回声“假”;}}echo"\n";if(defined("HELLO_ZAPI_PI")){echoHELLO_ZAPI_PI;}//你会得到//65538//HellozendAPI!//true//3.14好了,让我们说完预定义常量到这里,我不是开玩笑,其实很简单,稍微调整一下就可以继续了!原文链接:C++开发PHP7扩展定义常量
