0
可能吗? 不使用Zend API,只有Native。 对于PHP扩展使用它像:从HHVM运行PHP函数C++扩展
call_user_function(EG(function_table), NULL, &func, &retval, 1, params);
可能吗? 不使用Zend API,只有Native。 对于PHP扩展使用它像:从HHVM运行PHP函数C++扩展
call_user_function(EG(function_table), NULL, &func, &retval, 1, params);
您很可能希望vm_call_user_func().
Variant vm_call_user_func(const Variant& function, const Variant& params,
bool forwarding = false);
取决于你的扩展是在调用的时候做,你可能会想捕捉函数可能抛出的异常。
vm_call_user_func
知道如何处理的各种方式PHP定义可调用(例如"SomeClass::someMethod"
,array($obj, "method")
)。
根据提供的调用函数的方式,可能会有更优化的方法。你可以要求这个而不是任意的回调,用户必须提供一个闭包对象。由于封闭对象始终可以被调用(即,您不必验证存在于我的"SomeClass::someMethod"
示例中),所以您可以提取底层对象,将其存储而不是Variant
和vm_call_user_func()
将节省一些开销解码并验证它。