布尔OR条件 - 出了什么问题?

时间:2011-07-01 09:42:17

标签: php boolean

这是条件 -

if ($file !== "." || $file !== "..")

不能正常工作。

if (($file !== ".") || ($file !== ".."))

也不工作。

if ($file !== ".")

工作得很好。 “ 这真的让我感到前卫。我已经阅读了 php.net 在逻辑运算符(http://php.net/manual/en/language.operators.logical.php)上提供的所有内容,我搜索了一堆糟糕的教程,并且我对运算符优先级进行了三重检查。从各方面来看,任何一种方法都应该有效。

可能是什么原因?

3 个答案:

答案 0 :(得分:10)

$file不应该是.而且不应该是..

if ($file !== "." && $file !== "..")

答案 1 :(得分:1)

表达式:

if ( $file !== "."  ||  $file !== ".." )
if (($file !== ".") || ($file !== ".."))

对于$file的每个可能值,将评估为true:

  • for .条件$file !== ".."返回true
  • for ..条件$file !== "."返回true
  • a条件$file !== "."$file !== ".."都返回true

我想要你:

if ($file !== "." && $file !== "..") {
    // $file is neither . nor ..
}

反之亦然:

if ($file === "." || $file === "..") {
    // $file is either . nor ..
}

答案 2 :(得分:0)

它是否总是以任何机会落入真实状态? $ file不能等于“。”和“..”所以你的条件永远是真实的。你不需要一个而不是一个或吗?