【问题标题】:php extension how to return a string from a method?php 扩展如何从方法返回字符串?
【发布时间】:2011-11-16 01:57:36
【问题描述】:

我在 [example.cc] 中有一个方法:

std::string Car::accelerate (std::string n)
{
cout<<n<<endl;
return n;
}

我想从一个 php 扩展调用这个方法

我在我的 [test_php.cc] 扩展中写了这个:

 char *strr=NULL;
 int strr_len;
 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strr, &strr_len) == FAILURE) {
        RETURN_NULL();
  }
  std::string s(strr);
RETURN_STRING(car->accelerate(s),1);

我有以下错误:

warning: deprecated conversion from string constant to ‘char*’
/home/me.cc:79: error: cannot convert ‘std::string’ to ‘const char*’ in initialization
/home/me.cc: At global scope:warning: deprecated conversion from string constant to ‘char*’

如果我通过简单的调用 car-&gt;accelerate(s) 更改 return_string(..) _;它有效..确实它不会打印任何内容作为返回函数。需要一些帮助。欣赏

【问题讨论】:

  • 您能否提供行号以便我们知道第 79 行是哪一行?

标签: php c++ php-extension php-internals


【解决方案1】:

鉴于您最近的评论,我会将此作为(未受过教育的)答案提出。

RETURN_STRING() 在它的第一个参数中采用const char*。这就是你所说的“C-String”,并且没有从std::stringconst char * 的自动转换(至少对于编译器而言)。

您要做的是将const char* 作为第一个参数传递。要从 std::string 生成 const char*,请调用方法 c_str()。 IE。将最后一行更改为:

RETURN_STRING(car->accelerate(s) . c_str(), 1);

【讨论】:

  • 非常感谢!有用。我是新的 t php。我想问你如何为嵌套类创建 php 扩展?我的意思是我的 example.cc 看起来: class a{ public: a(); b类{公共:b(); ...变量};};如何创建 php_example.cc?另一个问题在这里stackoverflow.com/questions/7398259/…。请帮忙!!非常感谢。真的很感激!
  • @sunset,我很抱歉,但是(您可能没有意识到)您的问题不是 PHP 问题。纯粹的 C++ 知识和大量的编译器错误经验是可以回答的!更重要的是,我从来不需要嵌套类,所以我无能为力。祝你好运:)。
  • 第二个问题呢?如何从php访问变量?谢谢
  • 不,抱歉,这是我不知道的 PHP C++ 东西。
猜你喜欢
  • 2015-10-31
  • 2015-03-29
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多