Загадка про PHP. Номер A.
Пример Kukutz'a. Дано:
$a = 0;
var_dump ('all' != $a);
Что будет на экране.
Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.
Выведет <strike>true</strike> false из-за приведения 0 в строку.
Комментарий для Улитка:
Если ноль приведётся к ’0’, то операция будет выглядеть как ’all’ != ’0’, а они не равны, не так ли?
Наоборот, ’all’ к 0 приведется. По идее.
Комментарий для KalbasKa:
’all’ приведётся к int. так и есть.
А ответ будет — false!
Пока я пропадал столько загадок появилось. Жаль что некоторые уже отгаданы
Комментарий для Улитка:
А ты не заглядывай в ответы :)
Не могу добавлять комментарий, не заглядывая в остальные — кнопки добавить нет на главной страницы, а у меня не настолько крепкая сила воли, чтобы глаза на полдюйма вниз не опускать, когда я к кнопке добавления комментария тянусь :-)
Комментарий для Улитка:
Ну, а ты сначала придумай ответ, а потом честно его напиши :)
Если подразумевается, что от такой фичи можно пострадать, неправильно проверить значение, дать кому-то права админа сайта, то это беда лихого программера, который не приводит типы данных и сравнивает неизвестно что с неизвестно чем. :) Имхо.
Комментарий для detail:
От такой фичи страдает полно народу. Я, например, пострадал однажды. Типы данных привожу крайне редко. Ты делаешь это всегда?
Если из веб-формы приходит поле, которое должно быть числом, делаю intval. А сравниваю со значением из базы, которое имеет тип *INT.
Комментарий для detail:
Форма частный случай. У меня, например, значение вернула функция.
Тогда, сам знаешь, сравнивать надо оператором !==.
Комментарий для detail:
Тоже не всегда. Случаев таких — миллион, иногда хочется именно !=
2detail.
Если я сравню оператором !==, то «5»!==5 будет true, чего мне бы не хотелось.