PHP或操作符是否有问题


Is there something wrong with PHP OR operator?

我的转储变量出现在它们的页面上:

if ($_SERVER['REMOTE_ADDR'] == '44.71.45.98' OR '44.71.45.99') {
  //blah blah
}else{
  //blah
}

我知道这是错误的,但当我尝试…它在我的另一台电脑上工作。即使我知道这是错误的,它也没有提示我错误…

通常我这样写:

//this is correct
if(isset($a) or isset($b)){
}

是的,它应该是:

if ($_SERVER['REMOTE_ADDR'] == '44.71.45.98' or $_SERVER['REMOTE_ADDR'] == '44.71.45.99') ...

'or'(或'||')将布尔(true或false)表达式(例如使用'=='进行比较)组合在一起。在原始代码中,它将第二个IP字符串转换为布尔值(值为true),因此if语句将始终与匹配。

if (
$_SERVER['REMOTE_ADDR'] == '44.71.45.98'
OR
$_SERVER['REMOTE_ADDR'] == '44.71.45.99'
)

您的表达式不正确。应该是这样的:

if ($_SERVER['REMOTE_ADDR'] == '44.71.45.98' OR
    $_SERVER['REMOTE_ADDR'] == '44.71.45.99')

或者99%的开发者是怎么做的:

if ($_SERVER['REMOTE_ADDR'] == '44.71.45.98' ||
    $_SERVER['REMOTE_ADDR'] == '44.71.45.99')

我更喜欢使用ip数组(如果不止一个)

if(in_array($_SERVER['REMOTE_ADDR'], array('44.71.45.98', '44.71.45.99', etc))

这里需要使用逻辑或运算符..

你的代码应该是这样的…

if($_SERVER['REMOTE_ADDR'] == '44.71.45.98' || $_SERVER['REMOTE_ADDR'] == '44.71.45.99'){
    code if condition is true..
}
else{
  code if condition is false..
}

也可以这样做。

if($_SERVER['REMOTE_ADDR'] == '44.71.45.98' or $_SERVER['REMOTE_ADDR'] == '44.71.45.99')

这里我更喜欢使用||作为OR操作符。代码应该是:

if ($_SERVER['REMOTE_ADDR'] == '44.71.45.98' || $_SERVER['REMOTE_ADDR'] == '44.71.45.99')