В JavaScript оператор ==
не обязательно является транзитивным:
js> '0' == 0 true js> 0 == '' true js> '0' == '' false
То же самое верно в PHP? Можете ли вы привести пример?
Нет , оператор ==
не является транзитивным.
Тот же самый сценарий дает тот же результат в PHP.
echo var_dump('0'==0); echo var_dump(0==''); echo var_dump('0'=='');
выходы:
boolean true boolean true boolean false
То же самое верно в PHP:
//php '0'==0 //true 0=='' //true ''=='0' //false
Вы сами не тестировали? Это те же самые заявления, которые вы указали для javascript.
array() == NULL // true 0 == NULL // true array() == 0 // false
Проблема с языками сценариев заключается в том, что мы начинаем сравнивать вещи нестрогим образом, что приводит к различным чувствам «равенства». когда вы сравниваете «0» и «0», вы имеете в виду что-то другое, тогда, когда вы сравниваете «0» и «NULL». Таким образом, имеет смысл, что эти операторы не будут транзитивными. Однако рефлексивность должна быть инвариантом. Равенство по определению рефлексивно. Независимо от того, какой смысл вы подразумеваете равенство, всегда должно быть верно, что A равно себе.
еще более очевидным:
true == 1 // true true == 2 // true 1 == 2 // false