php:以这种方式使用if / else是有效的吗?

时间:2014-04-14 19:35:21

标签: php if-statement

有没有办法优化这样的东西?
我已经尝试过它不起作用(至少在php中)

$foo = 6;
if ($foo != (3 or 5 or 10)) echo "it work";
elseif($foo < (5 or 10)) echo "it work again";
else echo "it doesn't work;"

我想知道是否有更好的方法来编写这种验证 但是,如果这样的事情在其他langs中工作,请告诉我。

<小时/> 编辑:
回答这个问题

($foo != (3 or 5 or 10)) -> in_array($foo,array(3,5,10))


如果我想要像

这样的东西,我会做同样的工作
($foo != (3 and 5 and 10)) 

3 个答案:

答案 0 :(得分:3)

没有。不是。您针对$foo次操作的BOOLEAN结果测试了or值。它归结为

if ($foo != (true or true or true))

只是

if ($foo != true)
if (!$foo)

如果要针对多个值测试单个值,可以尝试

if(!in_array($foo, array(3,5,10))) { ... }

代替。对于您的<版本,这不会起作用。您必须单独测试每个值:

if (($foo < 5) or ($foo < 10)) { ... }

虽然从技术上讲这有点多余,因为如果$ foo小于5,它已经不到10。

答案 1 :(得分:0)

首先你可以使用

if(!in_array($foo, [5,10,15]))

第二件事在任何语言都不起作用,因为每件小于10的事情都不到5或10。所以不需要5.但我明白你的意思。我不知道这样做的快捷方式

在python中你可以这样做:

if(5 < x < 10)
    a, b = b, a // swapping these two

答案 2 :(得分:0)

我同意其他答案,如果你有更多的处理要做,你也可以这样做:

<?php

$x = 3;

switch ($x)
{
    case 6:
        $x = 5;
    case 3:
    case 7:
        $x = 5;
    case 5:
        echo 'It is working' . PHP_EOL;
        break;
}

编辑:感谢DanFromGermany指出堆叠的案例。添加它们作为示例。