Intereting Posts
Запретная ошибка Heroku 403 Почему эта функция возвращает "undefined"? 404 настраиваемая ошибка страницы перенаправления не показывает отсутствующий URL-адрес файла Получение базовой информации из Instagram с использованием PHP Regex / code для исправления поврежденных сериализованных данных PHP Каковы плюсы и минусы определения класса Controller через URL-адрес или наличие сценария для каждого контроллера? Как получить URI абсолютного изображения с SimpleHTMLDom Отправить письмо с библиотекой электронной почты CodeIgnitor php – доступ к внешнему классу с анонимного обратного вызова mysqli подготовленный оператор не может читать unicode IDE для CodeIgniter, работающий в Ubuntu Linux Компиляция латексного документа из PHP Drupal: как я могу удалить ссылки из таксономических терминов? Laurvel API TokenMismatchException Невозможно получить доступ к объявленной глобальной переменной в WordPress

Все ли сопоставления равенств в PHP симметричны?

Является ли $a == $b всегда эквивалентным $b == $a ?

Я думаю, что в JavaScript есть несколько странных случаев, когда это не так, из-за кастинга.

Я думаю, что идеал верен. Я задам еще один вопрос .

Зависит от того, что происходит между этими двумя вызовами. В противном случае да, те же. Порядок не имеет значения. Использование 2 equals == Строка из 1 и целое число 1 вернет true при сравнении. Тип игнорируется, сравнивается только значение. Так что не странность.

http://php.net/manual/en/language.operators.comparison.php

 <? $a=(string) 1; $b=(int) 1; var_dump($a); var_dump($b); echo $a==$b; 

Выходы: 1

http://www.ideone.com/JLJWQ

РЕДАКТИРОВАТЬ

Чтобы уточнить, нет абсолютно ничего, что можно было бы поставить в $ a или $ b, чтобы получить другой результат при сравнении, просто положив его на другую сторону оператора.

 $a="1234"; $b="1234"; echo $a==$b; echo $b==$a; 

Результат этого для любых значений $ a или $ b всегда будет, без сомнения, истинным, или false false.

Короче говоря, да. $a == $b всегда будет эквивалентом $b == $a . Есть короткие предложения, такие как поплавки. Конечно, вы не должны вставлять два float для равенства в любом случае.

РЕДАКТИРОВАТЬ
Что касается поплавков: если у вас было два поплавка и их сравнение, они технически должны быть одинаковыми. Однако значения с плавающей запятой, которые, похоже, имеют одинаковое значение, не обязательно должны быть идентичными. Таким образом, если $a является литералом .69 и $b является результатом вычисления, они могут быть очень разными, но оба имеют одинаковое значение. Вот почему вы никогда не должны сравнивать значения с плавающей запятой, используя == .

Если вам нужно сравнить значения с плавающей запятой, вам действительно нужно использовать наименьшую допустимую разницу в вашем конкретном случае. Что-то вроде этого будет работать для сравнения поплавков (установка нашей наименьшей допустимой разницы в 0.000001 ):

 if(abs($a-$b) < 0.000001) { //Same } 

PHP: abs – Абсолютная ценность

Единственный тип, который я мог видеть в другом, – это что-то вроде:

 $foo = 1; $bar = 1; ($foo = $foo + $bar) == ($bar = $foo); 

Чтобы понять, почему, посмотрите на это

 A -> ($foo = $foo + $bar) B -> ($bar = $foo); 

Если сначала выполняется A , результат будет равен 2 а результат B будет равен 2, поэтому они будут равны, и тест будет true .

Если B запускается первым, результат будет равен 1 , а результат B будет равен 2, поэтому они не равны, и тест будет false .

Но для любого сравнения одного типа (где A – переменная, а не выражение) она всегда будет рефлексивной.

Поэтому в общем смысле A == B не всегда гарантированно на 100% эквивалентен B == A Для переменных он всегда будет эквивалентным. Но для сложных выражений, связанных с назначением или модификацией переменных, это может и не быть.

http://php.net/manual/en/language.operators.comparison.php

Существуют различные операторы, которые вы можете использовать, если хотите сравнить листинг типов при сравнении. == оценивает значение true при равном значении, но не сравнивает тип данных. === оценивается как true, когда значения равны, а также типы данных. Использование последнего рассматривает тип casting, где он обычно игнорируется (например: строка, представляющая целое число и сравниваемое целое число).

Порядок логики в условном выражении не должен иметь значения.

Я пробовал несколько вариантов и не могу найти случай, когда ($a == $b) !== ($b == $a) но пока ничего не сработало:

 <?php $a = 0; $b = "0"; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = 0; $b = NULL; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = 0; $b = false; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = false; $b = NULL; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = ""; $b = NULL; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = "NULL"; $b = NULL; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = 0.000000000000000000000000001; $b = 0; echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; $a = array(); $b = array(); echo (($a == $b) == ($b == $a)) ? "OK\n" : "FAIL\n"; 

Итак, сейчас я сдаюсь. Идеи приветствуются!