Являются ли эти условия PHP одинаковыми или у одного из них есть преимущество
-
03-07-2019 - |
Вопрос
Есть ли какое-либо преимущество в написании условия PHP, подобного этому:
if ($variable != NULL) {
против
if (!empty($variable)) {
против
if ($variable) {
Разве это не одно и то же?Кажется, что последнее всегда самое простое, если вы просто пытаетесь определить, существует переменная или нет.Спасибо, что помогли мне понять разницу здесь.Я пропустил первый день PHP 101.
Решение
Я согласен с Шоном, но я опишу, что делает каждый из них, простым английским языком:
if ($variable != NULL) {
$variable
будет NULL
если он еще не был установлен.Это практически то же самое , что isset
и то же самое, что переменная не определена.
if (!empty($variable)) {
Как правило, это проверяет, является ли $variable
в виде строки ((string) $variable
) имеет strlen
из 0.Однако true
заставит его вернуться false
, как и целые числа, которые не равны 0, и пустые массивы.По какой-то причине (которую я считаю неправильной) $variable = '0';
вернется true
.
if ($variable) {
Эта проверка истинности / ложности действует следующим образом (boolean) $variable
- в основном, возвращает ли переменная значение true при преобразовании в логическое значение.
Один из способов думать об этом заключается в том, что он действует так же, как empty , за исключением того, что возвращает противоположное значение.
Для получения дополнительной информации о том, что я подразумеваю под (boolean) $variable
(типовое приведение / жонглирование) смотрите это страница руководства.
(Разработчики PHP:это в основном по памяти, если я здесь ошибаюсь, пожалуйста, поправьте меня!)
Другие советы
Проверьте этот стол чтобы получить представление о операторах сравнения PHP.Существует ряд тонких различий между false, 0, "", NULL и переменными, которые просто не определены.
При запуске в режиме строгой ошибки (E_STRICT) предложения
if ($variable) {}
и
if ($variable != null) {}
выдавал бы уведомления, когда эти переменные не инициализированы.
Notice: Undefined variable: variable
Эти уведомления являются индикаторами недостатков в коде, поскольку использование неинициализированного является возможной уязвимостью в системе безопасности.(Ключевое слово:register_globals).
Мой любимый способ проверки существования переменной - это
if (isset($variable)) {}
Это проверяет, использовалась ли переменная ранее (читать:инициализируется значением != null).
Связанный с этим Вопрос: Слабый набор текста в PHP:зачем вообще использовать isset?
По сути, они не совпадают при работе с пустыми значениями, нулевыми значениями, нулевыми и логическими значениями.