0
可能嗎? 不使用Zend API,只有Native。 對於PHP擴展使用它像:從HHVM運行PHP函數C++擴展
call_user_function(EG(function_table), NULL, &func, &retval, 1, params);
可能嗎? 不使用Zend API,只有Native。 對於PHP擴展使用它像:從HHVM運行PHP函數C++擴展
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);
取決於你的擴展是在調用的時候做,你可能會想捕捉函數可能拋出的異常。
vm_call_user_func
知道如何處理的各種方式PHP定義可調用(例如"SomeClass::someMethod"
,array($obj, "method")
)。
根據提供的調用函數的方式,可能會有更優化的方法。你可以要求這個而不是任意的回調,用戶必須提供一個閉包對象。由於封閉對象始終可以被調用(即,您不必驗證存在於我的"SomeClass::someMethod"
示例中),所以您可以提取底層對象,將其存儲而不是Variant
和vm_call_user_func()
將節省一些開銷解碼並驗證它。