PHP如何编写callerFunction实现按传入函数名和参数数组调用任意函数
解决方案
PHP原生提供了可变参数调用的专用能力,无需手动遍历拼接参数,可直接适配任意参数数量的目标函数,同时支持内置函数和自定义函数调用,以下是两种可直接使用的实现方案:
兼容全版本PHP的实现(基于call_user_func_array)
// 先修正你原自定义函数的变量语法错误,PHP变量需要加$前缀 function myFunction($inputStr, $paramOne, $paramTwo) { echo $inputStr . " P1: " . $paramOne . " P2: " . $paramTwo; } function callerFunction($functName, $functArgsArr) { // 合并固定前置参数和传入的参数数组,不需要前置参数可以跳过这一步 $callParams = array_merge(["Hello World!"], $functArgsArr); // 自动按顺序传入所有参数调用目标函数 return call_user_func_array($functName, $callParams); } // 调用测试 callerFunction("myFunction", ["one", "two"]); // 输出结果:Hello World! P1: one P2: two
PHP 5.6及以上版本极简实现(基于参数展开运算符...)
语法更简洁直观,性能也优于call_user_func_array:
function callerFunction($functName, $functArgsArr) { // ...运算符会把数组拆成逐个参数传入目标函数 return $functName("Hello World!", ...$functArgsArr); }
补充说明
- 若不需要在调用时插入固定前置参数,直接传入参数数组即可:
call_user_func_array($functName, $functArgsArr)或者$functName(...$functArgsArr) - 两种实现均不限制目标函数的参数数量,传入的参数数组长度和目标函数要求的参数数量匹配即可正常执行
内容的提问来源于stack exchange,提问作者LilBro
相关产品推荐
相关产品推荐

