Почему переменные равны , хотя это не так, в php?

Здравствуйте уважаемые знатоки. Почему выполнив этот код мы получим "равны"? Это же абсурд.

echo ('9 9 1' == 9) ? 'равны' : 'не равны'; // равны

Как '9 9 1' может быть равен девятке или наоборот? Только пожалуйста не отправляйте меня читать документацию о том как сравниваются типы в php. Она все равно не отвечает на вопрос как такое возможно.

P.S. php v 7.2


Ответы (1 шт):

Автор решения: newman

Это не абсурд, а PHP

В данном случае строка приводится к числу. А так как числа 9 9 1 не существует, то берется подстрока до первого пробела и она приводится к числу. В данном случае это будет 9

Проверить это можно просто

echo(intval("9 9 1"));

Выдаст 9

а

echo(intval("99 1"));

выдаст 99

Т.е. в вашем случае идет сравнение 9 и 9 - а они равны

Хотите избежать таких ошибок используйте сравнение с учетом типов. Т.е. ===

echo ('9 9 1' === 9) ? 'равны' : 'не равны'; // не равны
→ Ссылка