从HHVM C 扩展运行PHP函数

Run PHP function from HHVM C++ extention

本文关键字:PHP 函数 运行 扩展 HHVM      更新时间:2023-10-16

有可能吗?不使用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::someMethod"中存在SomeClass(,因此您可以提取基础对象,将其存储而不是Variant,而vm_call_user_func()可以保存一些高架开销解码和验证。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>