У мене є такий код:
$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] == 'e') {
$item['price'] = -1;
}
Він призначений ініціалізувати ціну товару до 0, а потім отримати інформацію про неї. Якщо ціна інформується як "e", це означає обмін замість продажу, який зберігається в базі даних як від'ємне число.
Також є можливість залишити ціну як 0, або тому, що товар є бонусом, або тому, що ціна буде встановлена в більш пізній момент.
Але, коли ціна не встановлена, що залишає її початковою величиною 0, if
вказаний вище цикл оцінюється як істинний, а ціна встановлюється в -1. Тобто, він вважає 0 рівним 'e'.
Як це можна пояснити?
Коли ціна надається як 0 (після ініціалізації), поведінка є помилковою: іноді if оцінюється як істинна, іноді вона оцінюється як хибна.
if((string)$item['price'] == 'e')
фіксує дивну поведінку. Дивіться stackoverflow.com/a/48912540/1579327 для більш детальної інформації