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

Есть ли какое-либо преимущество в написании условного PHP, подобного этому:

if ($variable != NULL) {

против

if (!empty($variable)) {

против

if ($variable) {

Разве они не одинаковы? Кажется, что последнее всегда самое простое, если вы просто пытаетесь определить, существует переменная или нет. Спасибо, что помогли мне понять разницу здесь. Я пропустил первый день PHP 101.


person bryan kennedy    schedule 05.01.2009    source источник


Ответы (4)


Я согласен с Шоном, но я объясню, что каждый из них делает на простом английском языке:

if ($variable != NULL) {

$variable будет NULL, если он не был установлен. Это практически то же самое, что и isset, и то же самое, что переменная не определена.

if (!empty($variable)) {

Как правило, это проверяет, имеет ли $variable в виде строки ((string) $variable) strlen значение 0. Однако true заставит его вернуть false, как и целые числа, отличные от 0, и пустые массивы. По какой-то причине (которую я считаю ошибочной) $variable = '0'; вернет true.

if ($variable) {

Эта проверка истинности/ложности действует как (boolean) $variable - в основном, возвращает ли переменная истину при преобразовании в логическое значение.

Один из способов думать об этом состоит в том, что он действует так же, как и пустой, за исключением того, что возвращает противоположное значение.

Для получения дополнительной информации о том, что я имею в виду под (boolean) $variable (приведение типов/жонглирование), см. этот страница руководства.

(Разработчики PHP: это в основном по памяти, если я ошибаюсь, поправьте меня!)

person Ross    schedule 05.01.2009
comment
NULL — это не то же самое, что undefined. - person JW.; 06.01.2009

Ознакомьтесь с этой таблицей, чтобы получить представление об операторах сравнения PHP. Существует ряд тонких различий между false, 0, "", NULL и переменными, которые просто не определены.

person Sean McSomething    schedule 05.01.2009
comment
Я никогда не знал, что такой стол существует. Спасибо! - person matpie; 05.01.2009

При работе в строгом режиме ошибок (E_STRICT) пункты

if ($variable) {}

а также

if ($variable != null) {}

будет выдавать уведомления, когда эти переменные не инициализированы.

Notice: Undefined variable: variable

Эти уведомления являются индикаторами недостатков в коде, поскольку использование неинициализированного кода является возможной уязвимостью системы безопасности. (Ключевое слово: register_globals).

Мой фаворит для проверки существования переменной

if (isset($variable)) {}

Это проверяет, использовалась ли переменная ранее (читай: инициализирована значением != null).

person Dan Soap    schedule 05.01.2009

Связанный вопрос: Слабая типизация в PHP: зачем вообще использовать isset?

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

person matpie    schedule 05.01.2009