PHP-CPP 参数的定义以及参数的转换

php传递一个字符串给php-cpp写的插件。从官方来看php-cpp基本都是向量(vector:编程语言的一种数据结构)来进行传递参数的。下面这个官方的例子就可以看出来。

#include <phpcpp.h>
void example(Php::Parameters &params)
{
}
extern "C" {
    PHPCPP_EXPORT void *get_module() {
        static Php::Extension myExtension("my_extension", "1.0");
        myExtension.add<example>("example", {
            Php::ByVal("a", Php::Type::Numeric),
            Php::ByVal("b", "ExampleClass"),
            Php::ByVal("c", "OtherClass")
        });
        return myExtension;
    }
}


这个时候如果说我们想把params参数进行转换为char或者string应该怎么办?其实官方也给了答案:http://www.php-cpp.com/documentation/variables


/**
 *  Example function
 *  @param  params
 */
void myFunction(Parameters &params)
{
    // store the first parameter in a std::string (the entire string
    // buffer is copied from the Php::Value object to the std::string)
    std::string var1 = params[0];
    // it also is possible to cast the object into a const char *. This works
    // too, but the buffer is only valid for as long as the Php::Value object
    // stays in scope
    const char *var2 = params[0];
    size_t var2size = params[0].size();
}

上面代码中包含了各种字符串转换。官方对params的解释是一个向量结构体,里面全部都是php:Value结构,而php:Value又是对c++语言里的一些类型进行包装后的通用类型。所以上面的params[0]实际就是取出第一个向量单元,类似数组的第一个纸,这个数组的类型是php:Value。所以php:Value转字符串就很方便了。


不过我在转换的时候用的第二个方式直接const char *var2=params[0];。但是我打印出来的数据却是0。按理说是不应该的,应该是我代码写的问题。于是我先转换的string后转换的char *。下面是我修改后的代码,仅供参考。


        std::string str=params[0];
        
        const char *str_c = str.c_str();




PHP-CPP 参数的定义以及参数的转换


本站如无特别说明即为原创,转而告知:(http://iwonmo.com/archives/1317.html)

标签: php-cpp, php-cpp 参数, php-cpp参数转换

添加新评论