Nasıl ben onun netliğini artırmak için bu kodu yazabilirsiniz?

6 Cevap

Eğer bu 'temiz' yazabilirim? Bir acemi sadece basit bir soru :)

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 Cevap

Ben bu gibi yapardı:

$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';
}

edit: Tabii ki bu bile kısa yapabilir, ama soru o “improve its clarity” yazılabilir nasıl oldu. Ve ben bir kod parçası ne olur, anlamak için daha kolay bir şey olarak netlik anlıyorum. Ve ben orijinal kodu arkasındaki gerçek mantığı benim çözüm ile oldukça net alır düşünüyorum.

Ben ayrı girinti eksikliği kodunuzu kötü bir şey görmek:

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 = "";
}

Belki de böyle bir fonksiyonu yararlanabilir rağmen

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

Kesinlikle değil 'temiz' çözüm, ama çok kısa:

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

Bu mantıklı neredeyse aynıdır ne körü (bunu beni dövdüğü için körü için +1) yaptım, ama biz bahsediyoruz beri clarity Ben bunu almak benim göstereceğim düşündüm. Ben bir şey kullanılmadığı anlamına gelir zaman yerine boş dizeler YANLIŞ kullanmak ister. Bu "hayır" demenin daha açık bir yol gibi geliyor. Ayrıca, ben nadiren eğer / else olmayan parantez sürümünü kullanabilirsiniz ama gerçekten kısa Atama ifadeleri için ben o şekilde daha kolay okumak bulabilirsiniz.

$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';
}

Bu ham GET değerleri ile dikkatli. Bu bir veritabanına değerleri eklemek üzere, özellikle emin istediğiniz tam olarak ne alıyorsanız yapmak için bunları işlemeden önce bu değerleri temizlemek gerekir.

İşte bir yoludur. Ancak muhtemelen TID ile farklı bir şey yapacağını, fid, orta şeyler onlar için amaçlanan ne biliyordu.

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);
}