Преобразование типов в PHP

Вот код:

$b=0;
if($b=="on") {
echo "+";
}
else {
echo "-";
}


Но в результате мы получаем ответ "+". Вопрос простой — почему?
  • Вопрос задан
  • 5948 просмотров
Пригласить эксперта
Ответы на вопрос 7
conf
@conf
Ruby developer
Начнем с того что ваш код выводит все-таки + а не -.
Если $b = 0 (int, целый тип), то при нестрогом сравнении со строкой «on» она приводится к целому типу, а значит станет равна нулю (см. 3 абзац), из чего и сработает условие с выводом плюса.
Если $b = «0» (string, строка), то при нестрогом сравнении со строкой «on» типы приводиться не будут, т.к. они уже совпадают, а т.к. строки не равны друг другу то сработает условие с выводом минуса.
Нужно учитывать тот факт, что в $_GET и $_POST все значения являются строками (ну или массивами строк), а значит будут работать правила преобразования типов из строк.
Ответ написан
Комментировать
WildZero
@WildZero
Потому что $b не равно «on»?
Ответ написан
Комментировать
alexxxst
@alexxxst
«on» преобразуется к int -> 0, потому что первый аргумент в сравнении тоже int.
Ответ написан
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
в переменной b содержится ноль.

в условии сравнили, если b = on (а оно не равно), то будет плюс на экране.
Но оно не равно, там ведь ноль, поэтому минус.

В пхп не нужно преобразовывать типы.
если там число, то это число, можешь складывать, вычитать, делить.
если строка — это строка.
он сам поймет, что внутри, за исключением редких моментов.
Ответ написан
Комментировать
CrazySquirrel
@CrazySquirrel
Потому что 0 != 'on', попробуйте $b == intval('on'), и получите +
Ответ написан
dizelbox
@dizelbox Автор вопроса
Извиняюсь, неправильно задал. Выводится "+", хотя конечно же логично должно быть "-".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы