"ABC" == 0
оценивает true
, потому что first "ABC"
преобразуется в целое число и становится 0
, затем по сравнению с 0
.
Это нечетное поведение языка PHP: обычно можно ожидать, что 0
будет преобразован в строку "0"
, а затем сравнен с "ABC"
с результатом false
.
Возможно, это то, что происходит в других языках, таких как JavaScript, где слабое сравнение "ABC" == 0
оценивает false
.
Выполнение строгого сравнения решает проблему:
"ABC" === 0
оценивает false
.
Но , что если мне нужно сравнить числа как строки с числами?
"123" === 123
оценивает false
, потому что левый и правый члены имеют разные типы.
Что на самом деле нужно, так это слабое сравнение без ловушек в PHP-жонглировании.
Решение состоит в том, чтобы явным образом продвигать термины в строку, а затем проводить сравнение (строгий или слабый больше не имеет значения).
(string)"123" === (string)123
есть
true
, а
(string)"123" === (string)0
есть
false
Применительно к исходному коду:
$item['price'] = 0;
/*code to get item information goes in here*/
if((string)$item['price'] == 'e') {
$item['price'] = -1;
}