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

时间:2017-04-20 19:01:58

标签: php c++ zend-framework hhvm

有可能吗? 不使用Zend API,只使用Native。 在PHP扩展中使用它:

call_user_function(EG(function_table), NULL, &func, &retval, 1, params);

1 个答案:

答案 0 :(得分:1)

您最有可能想要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定义callables的各种方式(例如"SomeClass::someMethod"array($obj, "method"))。

根据提供呼叫功能的方式,可能会有更多优化方式。您可以要求使用而不是任何任意回调,用户必须提供闭包对象。由于闭包对象始终是可调用的(即,您不必验证我的SomeClass示例中存在"SomeClass::someMethod"),您可以提取底层对象,而不是{{1 }和Variant将节省一些开销解码并验证它。