这是我的代码:
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()。我已经成功调用了其他函数,但是此紧凑版本有所不同。
答案 0 :(得分:0)
似乎PHP 7为某些功能添加了动态调用保护。从PHP源代码存储库中查看此unit test file。我不确定这是什么目的。您的代码虽然可以在PHP 5中工作;我验证了。
作为一种解决方法,您可以查看compact
函数的实现,并使用其基础实用程序函数来完成相同的任务。查看php_compact_var()
的实现。由于此功能是静态链接的,因此您必须将代码复制到扩展程序中。