从php扩展名到C ++调用compact()

时间:2018-09-11 04:35:49

标签: php c++ php-extension

这是我的代码:

  zval compact, compact_params[1], compact_result;
      zval A;
      ZVAL_STRING(&A, "test");
      ZVAL_STRING(&compact, "compact");
      ZVAL_STRING(&compact_params[0], "A");
      call_user_function(EG(function_table), NULL, &compact, &compact_result, 1, compact_params);

当我从php调用它时说:

无法动态调用compact()

我现在不知道如何从c ++调用compact()。我已经成功调用了其他函数,但是此紧凑版本有所不同。

1 个答案:

答案 0 :(得分:0)

似乎PHP 7为某些功能添加了动态调用保护。从PHP源代码存储库中查看此unit test file。我不确定这是什么目的。您的代码虽然可以在PHP 5中工作;我验证了。

作为一种解决方法,您可以查看compact函数的实现,并使用其基础实用程序函数来完成相同的任务。查看php_compact_var()的实现。由于此功能是静态链接的,因此您必须将代码复制到扩展程序中。