Являются ли эти условия PHP одинаковыми или у одного из них есть преимущество

StackOverflow https://stackoverflow.com/questions/413928

  •  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?

По сути, они не совпадают при работе с пустыми значениями, нулевыми значениями, нулевыми и логическими значениями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top