PHP-CPP开发扩展(六)

 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 &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>("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

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信