"ABC" == 0
оценивает true
, потому что "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;
}