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

标签 php c++ zend-framework hhvm

这可能吗? 不使用 Zend API,只使用 Native。 像在 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() 将节省一些解码和验证它的开销。

关于php - 从 HHVM C++ 扩展运行 PHP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527822/

相关文章:

php - 如何检测PHP中的空白空间?

php - 安全地使用 php : modifying user input to avoid security issues 中的 eval 函数

php - 什么是 PHP 相当于 Python 的 Try : . .. 除了:

c++ - 比较来自 typeid() 运算符的两个 type_info

c++ - Linux - 找到g++ lib的路径

php - 发送 : Redirect to Action with parameters

zend-mail - application.ini 中的多个 Zend_Mail 配置

php - 使用 PHP 或 jQuery/html/css 剪切表格中的文本

c++ - 我可以使用什么库来配置大部分或所有 GigE 和/或 Camera Link 相机?

php - 使用 Zend Action Helper ContextSwitch 创建自定义 JSON 响应对象