Ответ 1
Это связано с тем, что 011
рассматривается как восьмеричное значение из-за ведущего 0
.
Здесь более подробное объяснение:
- Литерал
011
распознается как восьмеричное значение - Затем преобразуется в десятичное значение, что равно
9
- Происходит фактическое сравнение, которое выглядит следующим образом:
9 == 11 // false
Как и в случае '011' == 11
, он оценивается как true
, потому что, когда строка сравнивается с целым числом, она также принудительно приводит к целочисленному значению. Интересно, что начальный ноль в строке игнорируется в процессе, а интерпретатор php обрабатывает значение десятичное, а не восьмеричное!