2011-03-24 34 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

你也可以让你的变量名更容易阅读。