You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个递归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);
}

怎么用?

这个合并后的函数完全兼容原来的两种使用场景:

  1. 如果你只需要转义数据(原来调用setTplArray_fn的地方):
$escapedText = setTplArray('<script>alert("xss")</script>');
// 结果是:&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;
  1. 如果你要把转义后的数据存入全局$tplArray(原来调用setTplArray的地方):
setTplArray('user_info', [
    'name' => '<b>John Doe</b>',
    'bio' => '<p>Love coding & coffee</p>'
]);
// 此时$tplArray['user_info']里的所有键和值都已经被转义

为什么这样合并更可读?

  • 所有逻辑都在一个函数里,不用跳转到另一个函数去理解整个流程
  • 内部函数$processData的命名更直观,一眼就能看出它的作用
  • 函数参数的设计保留了原有功能,不需要修改任何原有调用代码

内容的提问来源于stack exchange,提问作者CuriousPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:52:35