PHP-CPP开发扩展(二)

PHP-CPP是一个用于开发PHP扩展的C++库。本节讲解PHP输出和函数的实现。

输出和错误

上面的helloworld示例里,我们使用Php::out进行输出,并使用了std::endl换行刷新缓冲。Php::out变量其实是std::ostream类的一个实例,支持PHP中设置的所有输出缓冲。它与PHP脚本中的echo()函数基本相同。

几个常用的方法说明:

  • 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脚本以致命错误结束。

有了上面的几个方法,我们就可以实现PHP的标准输出功能。

使用输出必须引入iostream头文件。

实现PHP函数

上面的示例里其实我们已经实现了2个PHP函数。接下来,我们看看PHP-CPP如何实现以下4种函数:

  • 无形参无返回值
  • 无形参有返回值
  • 有形参无返回值
  • 有形参有返回值

得益于PHP-CPP封装的Php::ValuePhp::Parameters类,我们可以很简单的实现上面这些函数。

Php::Value可以认为是PHP的变量,内部封装了zval结构。通过对运算符的重载,C++里的变量支持自动转为Php::Value类型。

1、无形参无返回值

void func(){}

2、无形参有返回值

Php::Value func(){}

3、有形参无返回值

void func(Php::Parameters &params){}

4、有形参有返回值

Php::Value func(Php::Parameters &params){}

示例:

/**
 * User: 公众号: 飞鸿影的博客(fhyblog)
 * Date: 2018/7
 */

Php::Value sum_n(Php::Parameters &params)
{
    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),不定期为您呈现技术干货。

posted @ 2018-07-25 21:01 飞鸿影 阅读(...) 评论(...) 编辑 收藏