Являются ли эти PHP-условия одинаковыми или имеют преимущество? - PullRequest
2 голосов
/ 05 января 2009

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

if ($variable != NULL) {

против

if (!empty($variable)) {

против

if ($variable) {

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

Ответы [ 4 ]

6 голосов
/ 05 января 2009

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

2 голосов
/ 06 января 2009

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

if ($variable) {}

и

if ($variable != null) {}

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

Notice: Undefined variable: variable

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

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

if (isset($variable)) {}

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

2 голосов
/ 05 января 2009

Я согласен с Шоном, но в общих чертах опишу, что делает каждый из них на простом английском:

if ($variable != NULL) {

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

if (!empty($variable)) {

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

if ($variable) {

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

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

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

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

1 голос
/ 05 января 2009

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

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

...