【问题标题】:Php extension problemsphp扩展问题
【发布时间】:2011-06-05 15:52:08
【问题描述】:

当我尝试使用 c 创建一个 php 扩展并返回一个数组时,我遇到了一个棘手的问题。 我按照一些教程所说的那样做,但是我需要返回一个数组。 在所有示例中,array_init(return_array) 都被称为初始化返回数组,但我发现在任何地方都没有声明 return_array。所以,我得到了错误: error C2065: 'return_array' : undeclared identifier,但是,如果我添加:

zval * return_array ;

但它会抛出 您的应用无法读取地址 000000f 为什么?

你能给我一个包含返回数组的详细扩展示例......谢谢数百万次

【问题讨论】:

  • 查看几乎所有返回数组的函数。能贴出完整的代码吗?

标签: php c php-internals


【解决方案1】:

如果要返回数组,只需初始化return_value

array_init(return_value);

return_value 是一个zval*,由PHP_FUNCTION() 宏声明。

【讨论】:

    【解决方案2】:

    下面的代码给出了一个返回数组的例子:

    array_init(return_value);
    add_index_long(rturn_value,0,10);
    add_index_stringl(return_value,1,"test",1);
    zval * record;
    MAKE_STD_ZVAL(record);
    array_init(record);
    add_assoc_long(record,"key",1);
    add_index_zval(return_value,2,record);
    return;
    

    这将在php命名空间中返回以下结果,涵盖了大多数php扩展返回场景:

    array(
        10,
        "test",
        array(
            "key" => 1
        )
    )
    

    【讨论】:

      猜你喜欢
      • 2010-11-06
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2017-11-11
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多