优化PHP功能

时间:2012-02-15 17:58:06

标签: php function optimization

我的语言栏生成功能看起来像这样。它有效,但是,感觉就像,它不是最佳方式,而且这个功能有一堆可以删除的额外线条。你怎么缩小它?

public function generateLangs($url, $curlang, $langs) {
    $i = 0;
    $countlng = count($langs);
    foreach ($langs as $lang) {
        if (strstr($url, '?')) {
            if (strstr($url, 'lang')) {
                $newurl = preg_replace('&lang=(\w+)&', 'lang=' . $lang, $url);
            } else {
                $newurl = $url . '&lang=' . $lang;
            }
        }
        else {
            $newurl = $url . '?lang=' . $lang;                
        }
        $result = '<a ';
        if ($curlang == $lang) {
             $result .= 'class="active" ';
        }
        $result .= 'href="' . $newurl . '">' . $lang . '</a>' . "\n";
        if ($i != $countlng - 1)
            $result .= ' | ';
        echo $result;
        $i++;
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您可以使用简单占位符(例如%s%lang%)将语言值设为网址的参数:

$url = 'http://example.com/site/?lang=%lang%';
$newurl = str_replace('%lang%', $lang, $url);

你可以这样做,或者你应该封装逻辑以将URI的一些查询参数替换为它自己的函数,并在那里使用内置函数而不是滚动你自己(例如parse_url,{{ 1}},...)。

与此类似,同样适用于您的输出,您可以使用现有索引(我猜是0)并因此简化整体:

parse_str

关键点或多或少是您将彼此相邻的代码组合在一起。这或多或少会自动降低代码的复杂性,因此通常也会降低代码的长度。但要注意长度不是那么重要,更重要的是你可以干净利落地阅读它。