=== (тотожність) - true, лише якщо однакові і значення, і тип. == (рівність) спершу приводить операнди до спільного типу, а тоді порівнює.
1 === '1'; // false - int і string
1 == '1'; // true
0 == 'abc'; // false у PHP 8, true у PHP 7
null == false; // true
'1e3' == '1000'; // true - обидва числові рядки
Що змінив PHP 8: порівняння числа з нечисловим рядком тепер порівнює їх як рядки. Раніше 0 == 'abc' було true, бо 'abc' перетворювався на 0 - джерело реальних вразливостей у перевірках паролів і токенів.
Правило: за замовчуванням ===. == - лише коли приведення типів свідомо потрібне, і тоді краще привести явно: (int) $request->input('page') === 1.
Ще пастки ==:
in_array($value, $list)іarray_searchза замовчуванням порівнюють через==. Третій аргументtrueвмикає строге порівняння.switchтеж порівнює через==;match- через===.