PHP-CPP是一个用于开发PHP扩展的C++库。本节讲解在C++中PHP异常、变量、常量的实现相关知识。
异常
PHP和C++都支持异常,而PHP-CPP库这两种语言之间的异常处理是完全透明的。你在C++中抛出的异常会自动传递给PHP脚本,并且你的C++代码可以捕获PHP脚本抛出的异常,就像它是普通的C++异常一样。
遗憾的是,PHP-CPP目前仅支持PHP标准异常Exception,还不支持自定义异常。
抛出异常
示例:
#include <phpcpp.h> Php::Value myDiv(Php::Parameters ¶ms) { 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>("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 array Php::Value array; array[0] = "apple"; array[1] = "banana"; array[2] = "tomato"; // create empty object of type stdClass Php::Object object; object = Php::Object("DateTime", "now"); // methods can be called with the call() method Php::out << object.call("format", "Y-m-d H:i:s") << std::endl; // set a global PHP variable
