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


simple if statements (not short hand)

所以今天,和往常一样,我在编程。按照我平常的工作,打字,听傻朋克和其他各种时髦的曲调。然后突然,我不得不写一些类似的东西:

$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等于a,则bccake。所以我生闷气,哭了一下,决定问问Stackoverflow你们中是否有人知道为什么。

谢谢!

||是逻辑或,它将左侧评估为布尔值('a',这在布尔上下文中true(,如果这是真的,则返回true,如果不是,它对右侧做同样的事情。

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

现在,将此值与字符进行比较,根据PHP(松散比较图表(的疯狂规则,该字符也将是正确的:

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

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

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

它没有工作,因为

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

在这种情况下,字符串文本将转换为布尔值。

如果您在 if 中的$x不是空字符串或其他被认为是虚假的字符串,它们将是相等的。

但是,您可以像这样写您的:

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

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

我会这样做:

$valid = array('a', 'b');
if (in_array($x, $valid)) {
    ...
}

足够简单!

。但是,回想起来,也许你不想要另一种方式来做到这一点?

您所知|| 是一个逻辑运算符,总是返回 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。

了解 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(

请参阅 http://php.net/manual/en/types.comparisons.php