如何重写此代码以提高其清晰度?

时间:2010-03-27 18:21:32

标签: php

你能写出这个“清洁工”吗?只是初学者的一个简单问题:)

if(isset($_GET['tid']) && trim($_GET['tid'])!==""){
$act = 'tid';
$tid = trim($_GET['tid']);

}elseif(isset($_GET['fid']) && trim($_GET['fid'])!==""){
$act = 'fid';
$fid = trim($_GET['fid']);

}elseif(isset($_GET['mid']) && trim($_GET['mid'])!==""){
$act = 'mid';

}elseif(isset($_GET['act']) && trim($_GET['act'])!==""){
$act = trim($_GET['act']);

}else{
$act = "";
}

6 个答案:

答案 0 :(得分:5)

我会这样做:

$tid = isset( $_GET['tid'] ) ? trim( $_GET['tid'] ) : '';
$fid = isset( $_GET['fid'] ) ? trim( $_GET['fid'] ) : '';
$mid = isset( $_GET['mid'] ) ? trim( $_GET['mid'] ) : '';
$act = isset( $_GET['act'] ) ? trim( $_GET['act'] ) : '';

if ( empty( $act ) ) // act not set, construct the act from the other GET vars
{
    if ( !empty( $tid ) )
        $act = 'tid';
    else if ( !empty( $fid ) )
        $act = 'fid';
    else if ( !empty( $mid ) )
        $act = 'mid';
}

编辑当然,您可以将其缩短,但问题是如何将其写入“提高其清晰度”。我理解清晰度是一种让它更容易理解的东西,代码的一部分会发生什么。我认为原始代码背后的实际逻辑在我的解决方案中非常明确。

答案 1 :(得分:4)

除了缺少缩进之外,我的代码中没有看到任何不好的内容:

if(isset($_GET['tid']) && trim($_GET['tid'])!==""){
    $act = 'tid';
    $tid = trim($_GET['tid']);

}elseif(isset($_GET['fid']) && trim($_GET['fid'])!==""){
    $act = 'fid';
    $fid = trim($_GET['fid']);

}elseif(isset($_GET['mid']) && trim($_GET['mid'])!==""){
    $act = 'mid';

}elseif(isset($_GET['act']) && trim($_GET['act'])!==""){
    $act = trim($_GET['act']);

}else{
    $act = "";
}

虽然也许你可以从像这样的功能中受益

function get_non_empty($field){
    return isset($_GET[$field]) && trim($_GET[$field])!='' ? $_GET[$field] : NULL;
}

答案 2 :(得分:2)

绝对不是'最干净'的解决方案,但要短得多:

$act = '';
foreach(array('tid', 'fid', 'mid', 'act') as $a) {
    if(isset($_GET[$a]) && strlen(trim($_GET[$a])) > 0) {
        $$a = trim($_GET[$act = $a]);
        break;
    }
}

答案 3 :(得分:0)

这与poke所做的几乎完全相同(为了击败我而点击+1),但是因为我们正在谈论清晰度我认为我会表现出对它的看法。我喜欢使用FALSE而不是空字符串,这意味着没有使用某些东西。感觉就像是一种更明确的说“不”的方式。另外,我很少使用if / else的非括号版本,但对于非常简短的赋值语句,我觉得它更容易阅读。

$tid = isset($_GET['tid']) ? trim($_GET['tid']) : FALSE;
$fid = isset($_GET['fid']) ? trim($_GET['fid']) : FALSE;
$mid = isset($_GET['mid']) ? trim($_GET['mid']) : FALSE;
$act = isset($_GET['act']) ? trim($_GET['act']) : FALSE;

if ($act){ // act not set, construct the act from the other GET vars
    if ($tid)        $act = 'tid';
    else if ($fid)  $act = 'fid';
    else if ($mid)  $act = 'mid';
}

答案 4 :(得分:0)

小心那些原始的GET值。您应该在处理它们之前清理这些值,以确保获得所需的值,特别是如果要将值插入数据库时​​。

答案 5 :(得分:-1)

这是一种方法。然而,如果我知道它们的用途,我可能会对tid,fid,mid的东西做些不同的事情。

list($act,$val) = firstValidGETIn('tid','fid','mid','act');
switch($act) {
    case 'act': $act = $val; break;
    case null : $act = ""; break;
    default   : $$act = $val;
}

function firstValidGETIn()
{
    foreach(func_get_args() as $key)
    {
        if(array_key_exists($key,$_GET) && trim($_GET[$key]))
            return array($key, trim($_GET[$key]));
    }
    return array(null,null);
}