• 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),不定期为您呈现技术干货。

  • 相关阅读:
    对缓存的思考——提高命中率
    2009年职场上必要做的事
    开始睡觉吧睡觉让人更聪明
    人脸识别和模式识别网址
    英语面试精彩问答摘录
    Some Image Processing related Websites
    转载:研究生应该常去的网站
    人工智能和图像网站
    转载:60个必须知道的生活常识
    《c程序设计》的算法归纳
  • 原文地址:https://www.cnblogs.com/52fhy/p/9351830.html
Copyright © 2020-2023  润新知