Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Загадка про PHP. Номер A.

Пример Kukutz'a. Дано:

$a = 0;
var_dump ('all' != $a);

Что будет на экране.

15 комментариев
Улитка 2003

Выведет <strike>true</strike> false из-за приведения 0 в строку.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для Улитка:

Если ноль приведётся к ’0’, то операция будет выглядеть как ’all’ != ’0’, а они не равны, не так ли?

KalbasKa 2003

Наоборот, ’all’ к 0 приведется. По идее.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для KalbasKa:

’all’ приведётся к int. так и есть.

Улитка 2003

А ответ будет — false!

Пока я пропадал столько загадок появилось. Жаль что некоторые уже отгаданы

Евгений Степанищев (bolknote.ru) 2003

Комментарий для Улитка:

А ты не заглядывай в ответы :)

Улитка 2003

Не могу добавлять комментарий, не заглядывая в остальные — кнопки добавить нет на главной страницы, а у меня не настолько крепкая сила воли, чтобы глаза на полдюйма вниз не опускать, когда я к кнопке добавления комментария тянусь :-)

Евгений Степанищев (bolknote.ru) 2003

Комментарий для Улитка:

Ну, а ты сначала придумай ответ, а потом честно его напиши :)

detail 2003

Если подразумевается, что от такой фичи можно пострадать, неправильно проверить значение, дать кому-то права админа сайта, то это беда лихого программера, который не приводит типы данных и сравнивает неизвестно что с неизвестно чем. :) Имхо.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для detail:

От такой фичи страдает полно народу. Я, например, пострадал однажды. Типы данных привожу крайне редко. Ты делаешь это всегда?

detail 2003

Если из веб-формы приходит поле, которое должно быть числом, делаю intval. А сравниваю со значением из базы, которое имеет тип *INT.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для detail:

Форма частный случай. У меня, например, значение вернула функция.

detail 2003

Тогда, сам знаешь, сравнивать надо оператором !==.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для detail:

Тоже не всегда. Случаев таких — миллион, иногда хочется именно !=

kukutz 2003

2detail.

Если я сравню оператором !==, то «5»!==5 будет true, чего мне бы не хотелось.