简单的if语句(不是简短的)

时间:2012-07-30 18:26:57

标签: php if-statement

所以今天,我每天都在编程。继续我惯常的工作,打字,听Daft Punk和各种其他时髦的曲调。然后,我不得不写下以下内容:

$x = 'a'; // For instance

if ($x == 'a' || $x == 'b') {
    // ...
}

很简单,我说的不是太破旧。可是等等!我心想"there must be an easier way to do that - I'm repeating myself"。所以我开始尝试用以下代码解决这个问题:

if ($x == ('a' || 'b')) { 
    // ...
}

然而,这不起作用。完全没有。它总是是真的。如果$x等于abccake。所以我生气了,哭了一下,决定问Stackoverflow你们有没有人知道为什么。

谢谢!

7 个答案:

答案 0 :(得分:2)

||是逻辑或者,它将左侧评估为布尔值('a',它位于布尔上下文true中),如果该值为true则返回true,否则返回true对于右手边也一样。

var_dump('a' || 'b');
bool(true)

现在,将此值与一个字符进行比较,根据PHP的疯狂规则(loose comparison chart),该字符也将为真:

var_dump('a' == true);
bool(true)

答案 1 :(得分:1)

您要求PHP评估$x是否等于('a' OR 'b')的值,这将始终返回true,因为'a'和'b'都具有非零值。

在这种情况下,您必须单独使用比较运算符,或者从评论中使用nickb的建议。

答案 2 :(得分:1)

它没有用,因为

$a = 'a' || 'b'; // true, since 'a' and 'b' considered truthy

在这种情况下,您的字符串文字将为converted to booleans.

如果if中的$x不是空字符串或其他字符串被认为是假的,那么它们将是相同的。

但是你可以写下你的if:

if (in_array($x, array('a', 'b', 'cake'))

如果你觉得它让你的意图更清晰。

答案 3 :(得分:1)

我愿意:

$valid = array('a', 'b');

if (in_array($x, $valid)) {
    ...
}

够简单!

......但是,回想起来,也许你不想要另一种方式去做?

答案 4 :(得分:1)

如你所知||是一个逻辑运算符,并始终返回true或false(在另一个单词1或0中)。 所以,代码('a'||'b')总是返回true(1)。在上面这种情况下,$ x包含值,因此由于自动类型会话,$ x也设置为true(1)所以它的if(1 == 1)并且返回始终为true。

尝试使用以下代码

$x = false;
if ($x == ('a' || 'b')) { echo 'true'; } else{ echo 'false';}

始终返回false。

答案 5 :(得分:0)

了解php如何将字符串转换为布尔值

php > var_dump((bool) "a");
bool(true)
php > var_dump((bool) "b");
bool(true)
php > var_dump((bool) "cake");
bool(true)

所以基本上你问php if($ x == true)

答案 6 :(得分:0)