如何将两个递归PHP函数合并为一个?
合并PHP函数的解决方案
嘿,我来帮你把这两个函数合并成一个,让代码更整洁易读!
首先咱们先理清原来两个函数的分工:
setTplArray_fn负责递归转义数据里的HTML特殊字符(不管是单个字符串还是多维数组)setTplArray则是把转义后的结果存到全局的$tplArray里
合并的思路是把递归转义的逻辑封装成内部函数,让所有相关逻辑都集中在一个地方,同时保留原来两个函数的全部功能。下面是合并后的代码:
function setTplArray($keyOrData, $data = null) { // 内部递归处理函数,专门负责转义HTML特殊字符 $processData = function($value) use (&$processData) { if (!is_array($value)) { return htmlspecialchars($value); } $processedArray = []; foreach ($value as $key => $item) { // 转义数组键和值 $processedArray[htmlspecialchars($key)] = $processData($item); } return $processedArray; }; global $tplArray; // 场景1:只传一个参数,直接返回转义后的数据(对应原setTplArray_fn的功能) if ($data === null) { return $processData($keyOrData); } // 场景2:传两个参数,把转义后的数据存入全局tplArray(对应原setTplArray的功能) $tplArray[$keyOrData] = $processData($data); }
怎么用?
这个合并后的函数完全兼容原来的两种使用场景:
- 如果你只需要转义数据(原来调用
setTplArray_fn的地方):
$escapedText = setTplArray('<script>alert("xss")</script>'); // 结果是:<script>alert("xss")</script>
- 如果你要把转义后的数据存入全局
$tplArray(原来调用setTplArray的地方):
setTplArray('user_info', [ 'name' => '<b>John Doe</b>', 'bio' => '<p>Love coding & coffee</p>' ]); // 此时$tplArray['user_info']里的所有键和值都已经被转义
为什么这样合并更可读?
- 所有逻辑都在一个函数里,不用跳转到另一个函数去理解整个流程
- 内部函数
$processData的命名更直观,一眼就能看出它的作用 - 函数参数的设计保留了原有功能,不需要修改任何原有调用代码
内容的提问来源于stack exchange,提问作者CuriousPanda
相关产品推荐
相关产品推荐

