繁体   English   中英

从HHVM C ++扩展运行PHP函数

[英]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"为例),可以提取底层的对象,而不是存储它的Variantvm_call_user_func()会节省一些开销解码和验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM