Булево ИЛИ в состоянии - что не так? - PullRequest
1 голос
/ 01 июля 2011

Вот условие -

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

не работает.

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

тоже не работает.

if ($file !== ".")

работает просто отлично. ' Это действительно сводит меня с ума. Я прочитал все, что php.net может предложить по логическим операторам (http://php.net/manual/en/language.operators.logical.php), кучу дурацких учебников, которые я нашел в Google и трижды проверил приоритет операторов. Любой из способов должен работать.

В чем может быть причина?

Ответы [ 3 ]

10 голосов
/ 01 июля 2011

$file не должно быть . И не должно быть ..

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

1 голос
/ 01 июля 2011

Выражения:

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

Будет иметь значение true для каждого возможного значения для $file:

  • для . условие $file !== ".." возвращает true
  • для .. условие $file !== "." возвращает true
  • для a оба условия $file !== "." и $file !== ".." возвращают true

Можете ли вы, что хотите

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

Или наоборот:

if ($file === "." || $file === "..") {
    // $file is either . nor ..
}
0 голосов
/ 01 июля 2011

Всегда ли оно случайно попадает в истинное состояние? $ file не может быть равен обоим "." и "..", поэтому ваши условия всегда будут верными. Вам не нужно и вместо или?

...