Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

неожиданное поведение php

#php


доброго времени суток. объясните, пожалуйста, почему 

var_dump("любая строка" == 0);


возвращает

bool(true)


при этом если 0 привести к строковому или булеву типу, либо использовать жёсткое
сравнение, то условие отрабатывает нормально(false). как так получается что 0 равен
любой строке? php 5.6.30
    


Ответы

Ответ 1



Документация В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Преобразование в число Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Соответственно при сравнении "строка" == 0, строка преобразуется в число 0

Ответ 2



Потому что "любая строка" приводится к int. А int от неё - 0. Но 0 равен не любой строке. Попробуйте "123любая строка" Жесткое сравнение сначала сравнивает типы.

Ответ 3



ты используешь == который сортирует типы данных за тебя. 0 целочисленная переменная, в вашей проблеме строка прикастится к 'e' в целочисленную переменную. которая не парсится, и будет равно 0. строка '0e' тоже будет 0, и будет совпадать! НО! строка '1e'не равна 0 а равна 1 вместо этого используй === на примере https://ideone.com/3sZY7N var_dump("любая строка" == 0); //true var_dump("любая строка" === 0); //false

Комментариев нет:

Отправить комментарий