[英]Run PHP function from HHVM C++ extention
可能吗? 不使用Zend API,仅本机。 像在PHP扩展中一样使用它:
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);
根据扩展在调用时的功能,您可能希望捕获函数可能引发的异常。
try {
vm_call_user_func(function, params);
} catch (const Object&) {
try {
raise_warning("got exception in my extension");
} catch (const Object&) {
// exception in error handler!
}
}
vm_call_user_func
知道如何处理PHP定义可调用对象的各种方式(例如"SomeClass::someMethod"
, array($obj, "method")
)。
根据提供的调用函数的方式,可能会有更多的最佳方法。 您可能要求用户必须提供一个闭包对象,而不是任意的回调。 由于封闭对象总是调用(即你不必验证SomeClass
存在于我的"SomeClass::someMethod"
为例),可以提取底层的对象,而不是存储它的Variant
和vm_call_user_func()
会节省一些开销解码和验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.