PHP-CPP是一个用于开发PHP扩展的C++库。本节讲解PHP输出和函数的实现。php
上面的helloworld示例里,咱们使用Php::out
进行输出,并使用了std::endl
换行刷新缓冲。Php::out
变量实际上是std::ostream
类的一个实例,支持PHP中设置的全部输出缓冲。它与PHP脚本中的echo()
函数基本相同。ios
几个经常使用的方法说明:函数
std::flush
显示刷新缓冲;std::endl
输出换行并刷新缓冲;Php::out
输出内容到缓冲;Php::notice
生成一个PHP notice;Php::warning
生成一个PHP warning;Php::deprecated
生成一个PHP deprecated;Php::error
生成一个PHP error对于错误,通知和警告,咱们不须要换行符,但咱们仍然必须刷新缓冲区以实际生成输出。
Php::error
流有一些很是特殊的东西:当你刷新它时,PHP脚本以至命错误结束。code
有了上面的几个方法,咱们就能够实现PHP的标准输出功能。blog
使用输出必须引入
iostream
头文件。ip
上面的示例里其实咱们已经实现了2个PHP函数。接下来,咱们看看PHP-CPP如何实现如下4种函数:开发
得益于PHP-CPP封装的Php::Value
和Php::Parameters
类,咱们能够很简单的实现上面这些函数。get
Php::Value
能够认为是PHP的变量,内部封装了zval结构。经过对运算符的重载,C++里的变量支持自动转为Php::Value
类型。博客
一、无形参无返回值io
void func(){}
二、无形参有返回值
Php::Value func(){}
三、有形参无返回值
void func(Php::Parameters ¶ms){}
四、有形参有返回值
Php::Value func(Php::Parameters ¶ms){}
示例:
/** * User: 公众号: 飞鸿影的博客(fhyblog) * Date: 2018/7 */ Php::Value sum_n(Php::Parameters ¶ms) { int max = 0, sum = 0; if(params.size() == 0){ Php::warning << "miss param" << std::flush; return 0; } max = params[0]; if(params[0].type() != Php::Type::Numeric){ Php::warning << "param type must be numeric." << std::flush; return 0; } for(int i = 1; i <= max; i++){ sum += i; } return sum; }
该函数实现了有形参有返回值,其余几种改改就能够实现。函数里虽然返回的是C++的int类型变量,可是Php::Value
会自动转为PHP语言类型变量。
咱们只须要在get_module()
里注册一下:
extension.add<sum_n>("sum_n");
tips: 最终暴露出来的函数名能够与C++里函数名不一样,例如:
extension.add<sum_n>("sum_n2");
也是能够的。
从新编译便可:
$ sudo make clean && make && sudo make install
(未完待续)
想第一时间获取最新动态,欢迎关注关注飞鸿影的博客(fhyblog)
,不按期为您呈现技术干货。