2011-03-24 77 views
4

我早就IF:如何寫更長的IF更漂亮?

if(rand(1, 100) == 22 && $smth < time() && 
$smths > 5 && $sxsxsx > 250 && 
!$_SESSION['false']) 
{ 
    echo "wow, big if just happened!"; 
} 

怎麼寫更 「漂亮」?

+3

作爲旁註,最好將!$ _ SESSION ['false']作爲第一個測試。請記住,一旦遇到「停止」條件,PHP將停止查找。因此,把「容易」的測試或測試,可能返回False第一...現在你生成一個隨機數和得到時間之前檢查一個簡單的變量... – Carpetsmoker 2011-03-24 13:14:04

+0

//不適用 if(false){// do代碼} 這是在99%的情況下是正確的:D – MiPnamic 2011-03-24 13:14:13

回答

3

按照我的回答對相關

這應該用重構,這意味着你應該將單獨的測試分成不同的功能。你應該擺脫魔術數字和無意義的變量名稱。我會給你一個關於如何爲你的代碼做這個事情的例子,但是代碼是不可理解的。

17

我更喜歡在布爾運算符之前打破。

if(rand(1, 100) == 22 
    && $smth < time() 
    && $smths > 5 
    && $sxsxsx > 250 
    && !$_SESSION['false'] 
) 
+0

而*格式*確實漂亮,它仍然是完全無法讀取的意圖和[應重構] 5419660 /如何對寫長-IF-更漂亮/ 5419812#5419812)。 – Gordon 2011-03-24 13:31:04

+0

我也會把每個條件放在它自己的括號內。這在視覺上是分開的,因爲現在它只是一個運營商的湯。 – 2011-03-24 14:25:37

6

我喜歡列舉我的條件並將它們分組,以清楚它們的目的是什麼。

$is22 = rand(1, 100) == 22; 
$someTime = $smth < time() && $smths > 5; 
$meetsSx = $sxsxsx > 250; 
$inSession = !$_SESSION['false']; 
if ($is22 && $someTime && $meetsSx && $inSession) { 
    // do something 
} 
+1

這種代價高昂的表達式即使第一個條件是錯誤的,也會得到計算。 – Papuass 2011-03-24 14:33:07

+1

是的,但這些都不是太昂貴。 – 2011-03-24 15:06:04

0

可能

if(
    rand(1, 100) == 22 && 
    $smth < time() && 
    $smths > 5 && 
    $sxsxsx > 250 && 
    !$_SESSION['false'] 
) { 
    echo "wow, big if just happened!"; 
} 

歡呼

0

使您的代碼可讀性是一個非常重要的方面,當談到支持你的代碼 - 別人可能做到這一點支持。

看看coding styles(如果必須,請搜索更多信息)。

我個人格式化片斷,像這樣:

if (
    rand(1, 100) == 22 
    && 
    $smth < time() 
    && 
    $smths > 5 
    && 
    $sxsxsx > 250 
    && 
    !$_SESSION['false'] 
    ) 
{ 
    echo "wow, big if just happened!"; 
} 
5
$isSomethingValid = rand(1, 100) == 22 
    && $smth < time() 
    && $smths > 5 
    && $sxsxsx > 250 
    && !$_SESSION['false']; 

if ($isSometingValid) { 
    // do something 
} 
+0

這我喜歡,但唉,今天沒有更多的投票... :) – 2011-03-24 13:17:15

+0

我喜歡這個 – 2011-03-24 13:18:11

2

始終縮進封閉聲明一個較塊的身體多餘的。你會寫這樣的函數:

function (reallylongparam, reallylongparam, reallylongparam, 
     reallylongparam, reallylongparam) { 
    doStuff() 
} 

,所以你會寫你的if語句是這樣的:

if(rand(1, 100) == 22 && $smth < time() && $smths > 5 
     && $sxsxsx > 250 && !$_SESSION['false']) { 
    doStuff(); 
} 
0

你也可以讓你的變量名更容易閱讀。