博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP-CPP开发扩展(六)
阅读量:6147 次
发布时间:2019-06-21

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

PHP-CPP是一个用于开发PHP扩展的C++库。本节讲解在C++中PHP异常、变量、常量的实现相关知识。

异常

PHP和C++都支持异常,而PHP-CPP库这两种语言之间的异常处理是完全透明的。你在C++中抛出的异常会自动传递给PHP脚本,并且你的C++代码可以捕获PHP脚本抛出的异常,就像它是普通的C++异常一样。

遗憾的是,PHP-CPP目前仅支持PHP标准异常Exception,还不支持自定义异常。

抛出异常

示例:

#include 
Php::Value myDiv(Php::Parameters &params){ if (params[1] == 0) throw Php::Exception("Division by zero"); return params[0] / params[1];}extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension extension("helloworld", "1.0.0"); extension.add
("myDiv", { Php::ByVal("a", Php::Type::Numeric, true), Php::ByVal("b", Php::Type::Numeric, true) }); return extension; }}

测试:

echo myDiv(3,2);echo myDiv(3,0);

捕获异常

void myDivTest(){    try{        Php::call("myDiv", 3,2);        Php::call("myDiv", 3,0);    }catch(Php::Exception &e){        Php::out << "Division by zero" << std::endl;    }}

和PHP里的捕获异常很类似。但是目前还不知道怎么打印输出e里面的内容。

变量

Php :: Value类是对PHP变量zval的封装,使用的时候可以无缝在C++变量与PHP变量里自动转换。

下面还列出一些特殊的PHP变量:

Php::Value 申明数组Php::Object 申明对象Php::GLOBALS PHP全局变量

示例:

// create a regular arrayPhp::Value array;array[0] = "apple";array[1] = "banana";array[2] = "tomato";// create empty object of type stdClassPhp::Object object;object = Php::Object("DateTime", "now");// methods can be called with the call() methodPhp::out << object.call("format", "Y-m-d H:i:s") << std::endl;// set a global PHP variablePhp::GLOBALS["a"] = 12345;// global variables can be of any typePhp::GLOBALS["b"] = Php::Array({1,2,3,4});

常量

定义常量很简单:

#include 
extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("helloworld", "1.0"); // add integer constants myExtension.add(Php::Constant("MY_CONSTANT_1", 1)); myExtension.add(Php::Constant("MY_CONSTANT_2", 2)); // floating point constants myExtension.add(Php::Constant("MY_CONSTANT_3", 3.1415927)); myExtension.add(Php::Constant("MY_CONSTANT_4", 4.932843)); // string constants myExtension.add(Php::Constant("MY_CONSTANT_5", "This is a constant value")); myExtension.add(Php::Constant("MY_CONSTANT_6", "Another constant value")); // null constants myExtension.add(Php::Constant("MY_CONSTANT_7", nullptr)); // return the extension return myExtension; }}

在PHP脚本中使用常量同样简单:

类常量

#include 
class Dummy : public Php::Base{};extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("helloworld", "1.0"); // create a class objects Php::Class
dummy("Dummy"); // 有很多种方式添加类常量,但实现效果一样 dummy.property("MY_CONSTANT_1", 1, Php::Const); dummy.property("MY_CONSTANT_2", "abcd", Php::Const); dummy.constant("MY_CONSTANT_3", "xyz"); dummy.constant("MY_CONSTANT_4", 3.1415); dummy.add(Php::Constant("MY_CONSTANT_5", "constant string")); dummy.add(Php::Constant("MY_CONSTANT_5", true)); // add the class to the extension myExtension.add(std::move(dummy)); // return the extension return myExtension; }}

运行时常量

如果要在运行时从C++代码中找出用户空间常量的值,或者想要知道是否定义了常量,可以简单地使用Php::constant()Php::defined()函数。

要在运行时定义常量,请使用Php::define()

#include 
void example_function(){ // check if a certain user space constant is defined if (Php::defined("USER_SPACE_CONSTANT")) { // retrieve the value of a constant Php::Value constant = Php::constant("ANOTHER_CONSTANT"); // define other constants at runtime Php::define("DYNAMIC_CONSTANT", 12345); }}extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("helloworld", "1.0"); // add a function to the extension extension.add("example_function", example_function); // return the extension return myExtension; }}

(未完待续~fhyblog)

转载地址:http://ismya.baihongyu.com/

你可能感兴趣的文章
Spark RDD Transformation 简单用例(二)
查看>>
Hibernate缓存机制
查看>>
C++的头文件和实现文件分别写什么
查看>>
大公司都有哪些开源项目~~~简化版
查看>>
五大好用的开源MySQL管理工具推荐
查看>>
[模板] 动态ST表
查看>>
[BZOJ] 1001: [BeiJing2006]狼抓兔子
查看>>
非结构化数据与结构化数据提取--- 糗事百科案例
查看>>
Ubuntu16.04 "System program problem detected"
查看>>
nginx源码分析——线程池
查看>>
Nmap
查看>>
基于人脸识别的商业大数据4
查看>>
SpringBoot整合Redis使用Restful风格实现CRUD功能
查看>>
微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
查看>>
剑指offer 旋转数组
查看>>
19. Remove Nth Node From End of List
查看>>
linux搭建node环境
查看>>
Go语言基础之网络编程
查看>>
python - unitest - 实战题目
查看>>
SQL2005SP4补丁安装时错误: -2146233087 MSDTC 无法读取配置信息。。。错误代码1603的解决办法...
查看>>