Вчера я отправил answer на вопрос, который включал несколько (неизвестных мне в то время) примеров очень плохого кода. С тех пор я смотрел на свои фундаментальные знания PHP, которые позволили мне думать, что такой код возможен. Это подводит меня к вопросу, который я не могу показаться, чтобы найти ответ на:Это тест OK, чтобы узнать, установлена ли переменная
Если я хочу, чтобы проверить, была ли переменная ничего установить, это действительная практика не использования isset()
или другой вспомогательная функция? вот «например»:
if($not_set){
//do something
} else {
//do something else
}
Вместо того, чтобы ...
if(isset($not_set)){
//do something
} else {
//do something else
}
От имени переменной, вы можете увидеть, что эта переменная не установлена. Следовательно, условие будет ложным и будет выполняться часть else
. До сих пор я использовал эту практику, но после вчерашних сообщений у меня теперь есть подозрение, что это неправильно.
Вот почему я подумал, что было бы неплохо отказаться от функции isset()
выше. Из PHP инструкции:
КРП конструкция является одним из самых важных особенностей многих языков, PHP включен. Он позволяет использовать условное выполнение кода фрагментов. РНР располагает если структуру, которая аналогична C:
, если (выражение) оператор
Как описано в разделе о выражения, выражение вычисляется его логическое значение. Если выражение оценивает значение TRUE, PHP выполнит оператор , и если он примет значение FALSE - он проигнорирует его. Подробнее информация о значениях значений для FALSE приведена в разделе «Преобразование в boolean».
И из 'Преобразования в булеву разделе':
При преобразовании в булевой следующие значениях считаются FALSE:
... * специальный типом NULL (включая неустановленные переменные)
Почему руководство должно быть в порядке, чтобы указать, что неустановленная переменная bles включены, если это плохая практика? Если он не установлен, он преобразуется в NULL и поэтому корректно оценивается условным. Использование isset()
найдет тот же результат, но для этого потребуются дополнительные циклы.
Может кто-нибудь, пожалуйста, просветит меня о том, был ли я неправым все это время и почему? (И насколько это плохо, может быть?)
Спасибо, вы никогда не разочаровываетесь.
Редактировать: Спасибо всем (и это было быстро). Я честно думаю, что все ответы до сих пор велики и не знают, что выбрать для ответа ... Если вы не выбрали, я все равно останусь: o)
Ну, ваш подход * будет * задвижка снята с охраны переменные, но он также поймает другие переменные, которые * * установлены. Таким образом, это не тест для переменных, которые установлены – Gareth
Также см. Http://stackoverflow.com/questions/1960509/isset-and-empty-make-code-ugly – deceze
Эй, деце! Спасибо за все вчера - огромный скачок в моем понимании PHP (как вы можете видеть). Я не видел этого, когда искал, но это в основном то же самое, о чем я думал. – Tim