Что такое код empty


Содержание

В чем отличие isset от empty ?

16.07.2012, 19:43

Не разберусь с isset и empty
Здравствуйте. Необходимо проверить вводимые данные. Isset не совсем подходит, так как проверяет.

В чем разница между !empty и empty?
И парочку примеров для лучшего понимания, если не сложно

Чем отличается if(.) от if(isset(.)
Здравствуйте Помогите разобраться. Например, есть переменная $product_discount чем отличается.

Как определить Empty или не Empty массив?
Добрый вечер! Встрял в ситуацию. Заполняю массив в цикле значениями из базы данных вот так .

16.07.2012, 20:45 2 16.07.2012, 22:16 3 16.07.2012, 22:17

и отличие от моего кода? в методе гет вместо пост?)

Меню пользователя KOPOJI
16.07.2012, 22:18 5 17.07.2012, 16:39 [ТС] 6

KOPOJI, т.е. empty проверяет и есть ли переменная и есть ли пустота? А isset проверяет только есть ли переменная? тогда почему в моем примере в условии он выводит true:

$_SESSION[‘uid’] Такой переменной даже нет, ну т.е. $_SESSION -есть а $_SESSION[‘uid’] нет,Если поставлю isset то в условии будет false.
А также заметил странность при том когда [uid] => 3 ,условие выдает false т.е. выбирает conf ,может empty выдает обратные значения true и false ?

Добавлено через 2 часа 30 минут
что нужно поставть в $_COOKIE[‘uid’] чтобы это условие выдало труе:

Практика использования функции PHP empty()

Современное программирование давно и успешно манипулирует нетипированными переменными. Тип переменной можно не указывать заранее и менять его в процессе выполнения программы.

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

О пустом и не существующем

Функция PHP empty() обратна функции isset() и имеет некоторые особенности использования. Если переменной нет, то первая функция отзывается об этом положительно и ее результат — true, а вторая — отрицательно, то есть ее значением будет false.

По определению isset() призвана проверять существование переменной. Не имеет значения, что и как было присвоено переменной, главное, что она есть и не уничтожена функцией unset(). Результат функции isset() будет положительными — true. Важно помнить, что если $iVar = 0; то isset($iVar) будет true, но и empty($iVar) будет тоже true.

В первом случае результат означает, что переменная существует, во втором случае — переменная пустая, то есть значение «0» в любом его виде, будь то строка («0») или число (дробное — 0.0 или целое — 0) все равно: empty($iVar) будет равно true.

О безопасности и контроле

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

PHP предлагает современный синтаксис, поддерживающий устоявшуюся семантику, имеет мало ошибок, но требует к себе внимательного отношения. Например, вызов любой функции предполагает какое-то количество параметров.

Вызывая функцию, вовсе не обязательно передавать все параметры, можно передать лишь существенную их часть. Функция «обязана» проверить наличие и существование всех параметров. Те из них, которые отсутствуют или имеют неверные значения, необходимо привести к нормальному виду, присвоить им нужные значения.

В этом контексте функция PHP empty() имеет существенное значение. Выражение:

присвоит переменной $a значение 21, поскольку первая часть выражения будет представлена как 1, а вторая так и будет 20.

Результат будет иметь тип число и функция PHP empty($a) будет иметь результат — false, то есть переменная $a не пустая.

В этом контексте, имея функцию:

funcTest($a = 0, $b = 20)

$res = funcTest($aVal, $bVal)

будет иметь желаемое, то есть результат функции. А при вызове:


в тело функции попадает только один параметр со значением ‘$aVal . $bVal’ и скорее всего этот параметр будет интерпретирован как строка символов.

PHP empty() для объектов и массивов

Синтаксис языка имеет достаточное количество конструкций и функций для работы с объектами и массивами, однако с точки зрения проверки их на существование и на наличие значения особых отличий от переменных нет.

PHP empty (array) — эквивалентно вызову empty (simple variable). Однако в отношении объектов есть весьма существенные соображения. Что касается проверки объекта на существование (isset), вопрос вряд ли имеет смысл. Что касается функции PHP empty(), то целесообразность ее использования остается под вопросом.

По логике объектно-ориентированного программирования, объект имеет собственное содержание и собственный набор методов. Сказать пустой он или не пустой может только сам объект, но не сторонняя функция, пусть даже входящая в синтаксис языка.

Объект и его функция empty()

На этом простом, но законном, основании следует рассматривать всякий объект в контексте его понимания «пустоты». Например, реализация объекта «Штатное расписание» состоит из записей «Сотрудник». Но если нет ни одного сотрудника, то в «Штатном расписании» всегда есть варианты должностей вероятных сотрудников.

На каком уровне применить здесь функцию PHP empty object? На уровне «Штатное расписание» все существует, даже если нет ни одного сотрудника. На уровне «Сотрудник» объект уже есть, даже если он заполнен не полностью. А не полностью заполненный объект можно отнести к пустому объекту. Пользы от него штатному расписанию никакой.

В зависимости от выбранного стиля программирования, функции PHP empty() и isset() имеют очень важное значение для построения безопасного и надежного алгоритма, однако в отношении объектов все же лучше иметь свой вариант empty(), определяемый его содержанием.

empty

empty wine-bottle — пустая винная бутылка

The Empty Quarter stretches for nine hundred miles across southern Arabia. — Нежилая зона простирается на девятьсот миль на юге Аравийского полуострова.

empty hotels — свободные отели

Every room seemed empty now. — Все комнаты казались теперь нежилыми.

empty threat — пустая угроза

My life was very hectic but empty before I met him. — Моя жизнь была очень суматошной, но пустой, до того как я встретила его.

I felt empty and hollow; defeated. — Я чувствовал себя совершенно опустошённым; разбитым.

I found myself empty. — Я обнаружил, что голоден.

A cupboard stood open full of empties. — Буфет стоял раскрытый, наполненный пустыми бутылками.

Empty your bag into your hand to see if you can find the key. — Вытряси все из сумки, может, найдёшь свой ключ.

Empty the dirty water into the bowl. — Выплесни грязную воду в бак.

I emptied the ashtray. — Я вытряхнул пепельницу.

He emptied the contents out into the palm of his hand. — Он высыпал содержимое на ладонь.

She could empty a pub full of drunks just by lifting one fist. — Она могла очистить пивнушку, полную пьяниц, всего лишь пригрозив кулаком.

The stadium emptied at the end of the first day of athletics. — Стадион опустел к концу первого дня соревнований по лёгкой атлетике.

All the rivers on the east side of England empty into the North Sea. — Все реки на востоке Англии впадают в Северное море.

Англо-русский современный словарь . 2014 .

Смотреть что такое «empty» в других словарях:

Empty — Emp ty (?; 215), a. [Compar. ; superl. .] [AS. emtig, [ae]mtig, [ae]metig, fr. [ae]mta, [ae]metta, quiet, leisure, rest; of uncertain origin; cf. G. emsig busy.] 1. Containing nothing; not holding or having anything within;… … The Collaborative International Dictionary of English

empty — adj 1 Empty, vacant, blank, vo >New Dictionary of Synonyms

empty — [emp′tē] adj. emptier, emptiest [ME emti & (with intrusive p ) empti < OE æmettig, unoccupied, lit., at leisure < æmetta, leisure (< æ , without + base of motan, to have to: see MUST1) + ig, Y2] 1. containing nothing; having nothing in… … English World dictionary

empty — ► ADJECTIVE (emptier, emptiest) 1) containing nothing; not filled or occupied. 2) having no meaning or likelihood of fulfilment: an empty threat. 3) having no value or purpose. ► VERB (empties, emptied) … English terms dictionary

empty — c.1200, from O.E. æmettig at leisure, not occupied, unmarried, from æmetta leisure, from æ not + metta, from motan to have (see MIGHT (Cf. might)). The p is a euphonic insertion. Sense evolution from at leisure to empty is paralleled in several… … Etymology dictionary

Empty — Emp ty, v. t. [imp. & p. p. ; p. pr. & vb. n. .] To deprive of the contents; to exhaust; to make vo >The Collaborative International Dictionary of English


empty — [adj1] containing nothing abandoned, bare, barren, blank, clear, dead, deflated, depleted, desert, deserted, desolate, despoiled, destitute, devo >New thesaurus

empty of — completely without (something) The arena was empty of spectators. The streets are now empty of traffic. • • • Main Entry: ↑empty … Useful english dictionary

Empty — Emp ty, n.; pl. . An empty box, crate, cask, etc.; used in commerce, esp. in transportation of freight; as, special rates for empties. [1913 Webster] … The Collaborative International Dictionary of English

Empty — Emp ty, v. i. 1. To discharge itself; as, a river empties into the ocean. [1913 Webster] 2. To become empty. The chapel empties. B. Jonson. [1913 Webster] … The Collaborative International Dictionary of English

empty — index barren, baseless, consume, deficient, deplete, devo >Law dictionary

Правильная проверка на пустоту переменной?

Можете сказать как правильно делать проверку на пустоту переменной?
А точнее, нужно сделать проверку, что бы переменная не была пустой. Ну у каждой проверки я нашел минус, поэтому скажите как правильно проверять переменную?

$text = $_POST[‘text’];
if (isset($text)) <> //если переменная ровна пустоте, то проверка проходит
if (!empty($text)) <> //если переменная равна 0 0.0 ‘0’ то проверка не проходит
if ($text !== ») <> //если переменная равна null то проверка проходит
if ($text) <> //если переменная равна 0 0.0 ‘0’ то проверка не проходит

Как правильно проверять? Скажите, очень хочу в этом моменте разобраться раз и навсегда)

  • Вопрос задан более трёх лет назад
  • 29007 просмотров

Читая ответы, хочется плакать.

В кои-то веки нашелся автор, который осилил корректно сформулировать свою проблему: в дополнение к стандартной проверке РНР, ему надо отбрасывать и нули тоже. Казалось бы — прочти и сделай по заказанному.

Но нет. Один герой все бубнит про «это исходит от Вашей задачи» (при том что задача описана!) и дальше пишет бессмысленный код. Второй, по своей стародавней привычке, просто с умным видом пишет бессмыслицу. С третьего взятки гладки — типичное похапешное создание, пишет код не приходя в сознание.

И при этом никто (включая автора) почему-то не догадался тупо перечислить условия задачи:

Не говоря уже о том, что подумав, можно сообразить, что автора интересует длина строки. И написать код, который корректно, но не столь императивно следует всем условиям задачи:

Самое печальное, что писать это всё — пустая трата времени.
Серая похапешнаая масса так и останется серой массой, не понимающей языка, на котором она пишет, но всегда готовой дать совет ближнему.

Andro > 27.09.2020 01.02.2020 Игорь Приложения

Каждая версия операционной системы Android таит в себе «пасхалки». Это что-то вроде секретной функции, которую можно найти специальным методом нажатия соответствующих клавиш или кнопок. Пасхалки чаще бывают играми или простой анимацией. В этой статье мы рассмотрим, что же такое Android easter egg в седьмой версии.

Пасхалка в Android 7 Easter Egg (Empty Dish)

Игра-пасхалка Empty Dish в Android

В 7 версии операционной системе Андроид есть мини-игра, которая выступает в роли «пасхального яйца». Эта игра называется Empty Dish (пустая тарелка). Ее задачей является поимка котов, а также составление коллекций из этих трофеев. Когда у пользователя появится пойманный кот, он сможет делиться ими с другими владельцами устройств на Android 7.

На первый взгляд кажется, что словить котов в игре просто, но это не так. Для начала вам предлагаются выбрать из нескольких лакомств приманку, на которую будет проводиться охота. После этого кота нужно поймать, пока тот не ускользнул вместе с приманкой. Загвоздка в том, что пушистый может схватить приманку через 3 минуты, а может и через 50. Поэтому владелец устройства должен иметь еще и терпение, чтобы собрать большую коллекцию котиков.

Илон Маск рекомендует:  Перегрузка операций

Easter egg среди пунктов настроек устройства

Теперь рассмотрим, как запустить эту забавную игру в устройстве Android.

  1. Опустите «шторку» вашего смартфона или планшета и выберите «Настройки». Это можно сделать любым другим способом, главное — запустить настройки.
  2. Здесь нужно опустить список пунктов в низ и выбрать «О телефоне» («О планшете»).
  3. Найдите здесь пункт «Версия Android» и быстро нажмите на него 3 раза.
  4. Перед вами должна появиться буква «N» (логотип версии). Нажмите пару раз ее, затем нажмите и удерживайте до тех пор, пока не появится кот в стиле Emoji. Теперь можно считать, что «пасхалку» мы активировали. Но это еще не все.
  5. Опустите снова «шторку» и вберите ее редактирование — кнопка «Edit».
  6. В списке вы должны будете увидеть «. Android Eater Egg». Этот пункт нужно перенести в панель быстрых настроек Андроид «шторки».
  7. В быстрых настройках должна появится новая кнопка «Empty Dish». Выберите ее и сделайте выбор приманки.
  8. Далее вам уже можно закрыть меню быстрых настроек и ждать появления усатого хищника.
  9. Как только вы увидите сообщение о том, что появился кот, выберите его, после чего ваша коллекция пополнится. Каждому пойманному котику можно изменить имя.

Стоит сказать, что эта фраза Android Eater Egg переводится как «пасхальное яйцо Андроид». Если вы обладатель этой версии, то вы теперь знаете, как собрать коллекцию домашних животных на своем смартфоне.

Другие версии Android с «пасхалками»

Android 7 версии не единственная с пасхальным яйцом. Большинство предыдущих версий также имели скрытые игры и тематические анимации. Например:

  • Android Jelly Bean имела много нововведений, таких как новые параметры блокировки, обновленная и улучшенная система уведомлений, а также браузер Google Chrome по умолчанию. В качестве пасхального яйца в ней выступил счастливый боб, который заполнял экран смартфона своей улыбкой. При нажатии на него пользователь наблюдал множество разноцветных маленьких бобов, разлетающихся по экрану смартфона;
  • в Android KitKat пользователь мог видеть букву «К» перед собой, которую можно было вращать. После нажатия появлялось слово Android, написанное в соответствующем стилю шрифте. На него нужно было снова нажать, чтобы попасть на экран с мозаикой плиток, на которых были изображены предыдущие версии. Их можно было тоже вращать. После выстраивания версий в верной последовательности исчезали эти и появлялись новые;
  • Android Lollipop имела также «пасхалку», которую нужно было активировать в пункте с версией ОС. Прикосновение к появившемуся перед пользователем леденцу приводило к изменению цвета его окраски, нажимая и удерживая леденец, можно было запустить игру, вроде Flappy Bird. Здесь нужно было удерживать робота Android от прикосновения к леденцам, которые находились сверху и снизу;
  • Easter Egg в Android 6 Marshmallow была подобно предыдущей. Здесь пользователю также нужно было уклоняться от препятствий, управляя маленький зеленым роботом. Но здесь вместо леденцов выступали палочки с зефиром. Но эта «пасхалка» имела преимущество перед другими версиями, ведь в ней можно было играть вместе с друзьями по сети. Для этого нужно было нажать на маленькую кнопку «+».


Пасхальные яйца в других программах

Секретные мини-игры, изображения или анимации имеет не только Android. Easter Egg есть в браузере Mozilla Firefox. Если вписать в адресную строку вместо адреса сайта следующую фразу «about:Mozilla» или «about:robots» можно получить интересные изображения, такие как страница из Великой книги Mozilla и приветствие робота. Ну а нам остается только ждать релиза новых версий Андроид, чтобы поиграть в веселые «пасхалки».

Empty Dish в Andro >

Практически каждый поклонник ОС Андроид знает, что ее разработчики припрятали в системе своеобразные «пасхалки», найти которые не так-то просто. В каждой версии операционки они свои. Об одной из таких «пасхалок» далее и пойдет речь. Что такое функция Empty Dish (Easter Egg) в Andro >

Описание

Empty Dish (пустая тарелка) – это простенькая игра от Google, главная цель которой заключается в коллекционировании пойманных котов. Многие заслуженно сравнивают ее с Pokemon GO, но при этом «пасхалка» устроена намного проще. Игра присутствует в версиях Android Nougat (7.0 и 8.0).

Сразу стоит оговорить, что ловить котов – задача непростая. Необходимо выбирать лакомство для заманивания котика, а потом успеть поймать его, пока кот «не ушел». Произойти это может и через час после выбора лакомства, а может и через минуту. При этом есть вероятность, что на угощение позарится кот, который уже имеется в коллекции. В этом и заключается вся суть игры.

Разумеется, разработчики предусмотрели возможность делиться своими результатами с друзьями и другими пользователями операционки. Это вносит в коллекционирование еще и эффект соревнования. И конечно же, эта игра обязательно понравится любителям котов.

Как запустить функцию Empty Dish (Android Easter Egg)

Если четко следовать инструкциям, то ничего сложного в этом нет. Включить игру самостоятельно, не зная всех условий, практически невозможно. Итак, что же нужно сделать для запуска?

  1. Открыть настройки, раздел «О телефоне».
  2. Найти версию ОС и быстро тапаем по ней, пока на экране не появится логотип операционки – буква «N». Он отобразится на фоне домашнего экрана.
  3. Нажмите и удерживайте палец на логотипе. Под ним на несколько секунд появится значок рыжего котика.

После этих простых действий игра станет доступной, но это еще не все, что нужно сделать. Дальнейшие действия таковы.

  1. Полностью разворачиваем меню уведомлений (шторку).
  2. Включаем его редактирование или кнопку «Edit».
  3. После нажатия должно появиться дополнительное меню, в котором присутствует мордаха кота и подпись «. Android Easter egg».
  4. Нужно перетащить значок в основное окно уведомлений. После этого в названии останутся одни вопросительные знаки.
  5. Сворачиваем панель уведомлений и открываем ее заново.
  6. Теперь вместо мордочки кота здесь присутствует значок тарелки Empty Dish.

Как играть

Все, теперь можно играть. Здесь все элементарно просто. Необходимо нажать на значке тарелочки, после чего будет предложено несколько вариантов «лакомства». Положив еду на тарелку, остается только ждать появления уведомления о прибытии кота: «A cat is here». Нужно открыть уведомление своевременно, чтобы получить кота в свою коллекцию.

Полезная информация

  • Если в течение нескольких часов кот так и не приходил, то попробуйте другую приманку. С другой стороны, длительное ожидание может вознаграждаться редкими видами.
  • Многие спрашивают, а можно ли играть в игру на ранних версиях ОС? Да, это вполне реально. В Плей Маркете появилось приложение Neco Collector, которая является портированной версией для более ранних версий Андроида.
  • Обратите внимание, что «пасхалка» отсутствует в версиях на MIUI. Это значит, что для коллекционирования котов при любой версии ОС потребуется установка приложения.

Пасхалки в предыдущих версиях

Тем, кто только узнал о наличии в Андроиде (7.0 и 8.0) «пасхального яйца» в виде кота Neko, всегда интересно, а что же было до этого в других версиях? Отвечаем:

  • 2.3 – картина Андроид в толпе разговаривающих по телефону зомби;
  • 3.0 – пасхалка, вдохновение для которой разработчики получили после просмотра фильма «Трон: наследие»;
  • 4.0 – стилизованный под мем Nyan Cat Андроид двигается по экрану;
  • 4.1-4.3 – веселые желейные бобы перемещаются по экрану;
  • 4 – стилизованная под KitKat плитка и мини-игра;
  • 5.0 и 6.0 – мини-игры типа Flappy Bird, где нужно было не дать небольшому Андроиду удариться о леденец (5.0) или зефирку на палочке (6.0).

В восьмой версии операционки пользователь может поиграть с осьминогом на своем экране. Остается пожелать удачи в сборе коллекции котиков, ведь что такое Empty Dish (Easter Egg) в Android и как работает эта пасхалка вы уже знаете.

empty


(PHP 4, PHP 5, PHP 7)

empty — Проверяет, пуста ли переменная

Описание

Проверяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или её значение равно FALSE . empty() не генерирует предупреждение, если переменная не существует.

Список параметров

До PHP 5.5 empty() проверяет только переменные, и попытка проверить что-то еще вызовет ошибку синтаксиса. Другими словами, следующий код не будет работать: empty(trim($name)). Используйте вместо него trim($name) == false.

Если переменная не существует, предупреждение не генерируется. Это значит, что empty() фактически является точным эквивалентом конструкции !isset($var) || $var == false

Возвращаемые значения

Возвращает FALSE , если var существует и содержит непустое ненулевое значение. В противном случае возвращает TRUE .

Следующие значения воспринимаются как пустые:

  • «» (пустая строка)
  • (целое число)
  • 0.0 (число с плавающей точкой)
  • «0» (строка)
  • NULL
  • FALSE
  • array() (пустой массив)

Список изменений

empty() теперь поддерживает выражения, а не только переменные.

Проверка нечислового индекса строки возвращает TRUE .

Примеры

Пример #1 Простое сравнение empty() и isset() .

// Принимает значение true, потому что $var пусто
if (empty( $var )) <
echo ‘$var или 0, или пусто, или вообще не определена’ ;
>

// Принимает значение true, потому что $var определена
if (isset( $var )) <
echo ‘$var определена, даже если она пустая’ ;
>
?>

Пример #2 empty() и строковые индексы

В PHP 5.4 был изменен способ обработки строковых индексов в empty() .

Результат выполнения данного примера в PHP 5.3:

Результат выполнения данного примера в PHP 5.4:

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

При использовании функции empty() на недоступных (необъявленных) свойствах объекта будет вызван встроенный метод объекта __isset(), если он определен.

Смотрите также

  • isset() — Определяет, была ли установлена переменная значением, отличным от NULL
  • __isset()
  • unset() — Удаляет переменную
  • array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
  • count() — Подсчитывает количество элементов массива или чего-либо в объекте
  • strlen() — Возвращает длину строки
  • Таблица сравнения типов

User Contributed Notes 44 notes

Please note that results of empty() when called on non-existing / non-public variables of a class are a bit confusing if using magic method __get (as previously mentioned by nahpeps at gmx dot de). Consider this example:

class Registry
<
protected $_items = array();
public function __set ( $key , $value )
<
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
<
if (isset( $this -> _items [ $key ])) <
return $this -> _items [ $key ];
> else <
return null ;
>
>
>

$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;

var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // true, .. say what?
$tmp = $registry -> notEmpty ;
var_dump (empty( $tmp )); // false as expected
?>

The result for empty($registry->notEmpty) is a bit unexpeced as the value is obviously set and non-empty. This is due to the fact that the empty() function uses __isset() magic functin in these cases. Although it’s noted in the documentation above, I think it’s worth mentioning in more detail as the behaviour is not straightforward. In order to achieve desired (expexted?) results, you need to add __isset() magic function to your class:


class Registry
<
protected $_items = array();
public function __set ( $key , $value )
<
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
<
if (isset( $this -> _items [ $key ])) <
return $this -> _items [ $key ];
> else <
return null ;
>
>
public function __isset ( $key )
<
if (isset( $this -> _items [ $key ])) <
return ( false === empty( $this -> _items [ $key ]));
> else <
return null ;
>
>
>

$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;

var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // false, finally!
?>

It actually seems that empty() is returning negation of the __isset() magic function result, hence the negation of the empty() result in the __isset() function above.

When you need to accept these as valid, non-empty values:
— 0 (0 as an integer)
— 0.0 (0 as a float)
— «0» (0 as a string)

function is_blank ( $value ) <
return empty( $value ) && ! is_numeric ( $value );
>
?>

This is similar to Rails’ blank? method.

If you want to use empty() to evaluate an expression (not a variable), and you don’t have PHP 5.5+, you can do it by wrapping the call to empty in a function, like so:
function is_empty ( $var ) <

return empty( $var );

>
?>
Then you can do something like
if( is_empty ( NULL )) <
/* . */
>
?>
without issue, since the local variable $var is being tested rather than the expression in the function call itself.

= ‘ ‘ ;
var_dump (empty( $str )); // boolean false
?>

So remember to trim your strings first!

= ‘ ‘ ;
$str = trim ( $str );
var_dump (empty( $str )); // boolean true
?>

empty() should not necessarily return the negation of the __isset() magic function result, if you set a data member to 0, isset() should return true and empty should also return true. A simpler implementation of the __isset magic function would be:

public function __isset($key) <
return isset($this-><$key>);
>

I don’t understand why this isn’t included in stdClass and inherited by default.

/**
* @author : Nanhe Kumar
* List of all empty values
**/

$testCase = array(
1 => » ,
2 => «» ,
3 => null ,
4 => array(),
5 => FALSE ,
6 => NULL ,
7 => ‘0’ ,
8 => 0 ,

foreach ( $testCase as $k => $v ) <
if (empty( $v )) <
echo »
$k => $v is empty» ;
>
>
/**
Output
1=> is empty
2=> is empty
3=> is empty
4=>Array is empty
5=> is empty
6=> is empty
7=>0 is empty
8=>0 is empty
**/
?>

To add on to what anon said, what’s happening in john_jian’s example seems unusual because we don’t see the implicit typecasting going on behind the scenes. What’s really happening is:

(int)$a == $b -> true, because any string that’s not a number gets converted to 0
$b==(int)$c -> true, because the int in the string gets converted
and
$a==$c -> false, because they’re being compared as strings, rather than integers. (int)$a==(int)$c should return true, however.

Note: I don’t remember if PHP even *has* typecasting, much less if this is the correct syntax. I’m just using something for the sake of examples.

I’m comparing behavior of `!` and `empty()`, find an undocumented behavior here.

just like cast-to-boolean, `empty()` cares about if SimpleXML object is made from emty tags.

`empty(simplexml_load_string(‘ ‘))` is TRUE

this behavior begins from php 5.1.0

7, in 5.0.x that’s FALSE

test if all multiarray’s are empty

function is_multiArrayEmpty ( $multiarray ) <
if( is_array ( $multiarray ) and !empty( $multiarray )) <
$tmp = array_shift ( $multiarray );
if(! is_multiArrayEmpty ( $multiarray ) or ! is_multiArrayEmpty ( $tmp )) <
return false ;
>
return true ;
>
if(empty( $multiarray )) <
return true ;
>
return false ;
>

$testCase = array (
0 => » ,
1 => «» ,
2 => null ,
3 => array(),
4 => array(array()),
5 => array(array(array(array(array())))),
6 => array(array(), array(), array(), array(), array()),
7 => array(array(array(), array()), array(array(array(array(array(array(), array())))))),
8 => array( null ),
9 => ‘not empty’ ,
10 => «not empty» ,
11 => array(array( «not empty» )),
12 => array(array(),array( «not empty» ),array(array()))
);

foreach ( $testCase as $key => $case ) <
echo » $key is_multiArrayEmpty= » . is_multiArrayEmpty ( $case ). «
» ;
>
?>

OUTPUT:
========

0 is_multiArrayEmpty= 1
1 is_multiArrayEmpty= 1
2 is_multiArrayEmpty= 1
3 is_multiArrayEmpty= 1
4 is_multiArrayEmpty= 1
5 is_multiArrayEmpty= 1
6 is_multiArrayEmpty= 1
7 is_multiArrayEmpty= 1
8 is_multiArrayEmpty= 1
9 is_multiArrayEmpty=
10 is_multiArrayEmpty=
11 is_multiArrayEmpty=
12 is_multiArrayEmpty=

(experienced in PHP 5.6.3) The `empty()` can’t evaluate `__get()` results explicitly, so the `empty()` statement bellow always renders true
class Juice extends Liquid <
protected $apple ;
protected $orange ;
public function __get ( $name ) <
return $this -> $name ;
>
public function __construct ( $apple , $orange ) <
$this -> apple = $apple ;
$this -> orange = $orange ;
>
>

class Glass <
protected $liquid ;
public function __get ( $name ) <
return $name == «liquid» ? $this -> liquid : false ;
>
public function __construct () <
$this -> juice = new Juice ( 3 , 5 );
>
>

$glass = new Glass ();
var_dump (empty( $this -> liquid -> apple ));

/**
* The output is:
* bool(true)
*/
?>

The correct way is to force the evaluation of `__get()` first, by using extra braces around implicit statements like this:
(empty(( $this -> liquid -> apple )));

/**
* The output is:
* bool(false)
*/
?>

So if you are using packages that utilize object oriented designs and magic methods like `__get()`, it’s a good practice to always use double braces for `empty()` calls.


Be careful, if «0» (zero as a string), 0 (zero as an integer) and -0 (minus zero as an integer) return true, «-0» (minus zero as a string (yes, I already had some customers that wrote -0 into a form field)) returns false. You need to cast your variable before testing it with the empty() function :

= «-0» ;
echo empty( $var ); // returns false
$var = (int) $var ; // casts $var as an integer
echo empty( $vat ); // returns true
?>

Note that checking the existence of a subkey of an array when that subkey does not exist but the parent does and is a string will return false for empty.

= array( ‘search’ => ‘1’ );
empty( $params [ ‘search’ ][ ‘filter’ ]); # returns false
?>

This is correct, per the documentation (http://php.net/manual/en/language.types.string.php); quite a bit down the page is the Warning: «Writing to an out of range offset pads the string with spaces. Non-integer types are converted to integer.» ) I didn’t receive a warning but perhaps that’s correct too. depends on whether the string -> integer conversion is considered «illegal»: «Illegal offset type emits E_NOTICE.»

(i.e. since $params[‘search’] is a string, the ‘filter’ subscript is converted to 0, so the test becomes empty($params[‘search’][0]), which is obviously false), but it tripped me up enough to mistakenly file a bug report (which I’ve since closed).

I can’t use empty() in all situations because ‘0’ is usually not cons s just there for curiosity.

= microtime ( true );
$a = 0 ;
$b = ‘asd’ ;
for ( $i = 0 ; $i 5000000 ; $i ++)
<
if ( 0 == mb_strlen ( $b ))
<
$a ++;
>
>
echo «Total time 0 == mb_strlen(var): » . round ( microtime ( true ) — $microtimeref , 3 ) . ‘s
‘ ;
?>

The results:

Total time 0 == mb_strlen(var): 3.141s
Total time 0 === strlen(var): 2.904s
Total time 0 == strlen(var): 2.878s
Total time » == var: 1.774s
Total time » === var: 1.706s
Total time empty(var): 1.496s

Thus » === var will be my zero length string test.

In reply to «admin at ninthcircuit dot info»,

Using str_replace is unnecessary. I would encourage the use of trim which would most likely be faster (haven’t tested) and easier. Trim also takes care of other white space like line breaks and tabs. Actually, in most of the applications I code, I use a multi-dimensional array map function with trim on the Super Globals such as $_POST, $_GET and $_COOKIE as so far, there hasn’t been an instance where I would want any user input to begin or end with whitespace. The good thing about doing this is that you never have to worry about ‘trimming’ your input which makes your code easier and more reliable (incase you forget to trim some input).

Simple solution for: «Fatal error: Can’t use function return value in write context in . «

Since I didn’t like how empty() considers 0 and «0» to be empty (which can easily lead to bugs in your code), and since it doesn’t deal with whitespace, i created the following function:

function check_not_empty ( $s , $include_whitespace = false )
<
if ( $include_whitespace ) <
// make it so strings containing white space are treated as empty too
$s = trim ( $s );
>
return (isset( $s ) && strlen ( $s )); // var is set and not an empty string »
>
?>

Instead of saying if (!empty($var)) < // it's not empty >you can just say if (check_not_empty($var)) < // it's not empty >.

If you want strings that only contain whitespace (such as tabs or spaces) to be treated as empty then do: check_not_empty($var, 1)

If you want to check if a string IS empty then do: !check_not_empty($var).

So, whenever you want to check if a form field both exists and contains a value just do: if (check_not_empty($_POST[‘foo’], 1))

no need to do if (isset() && !empty()) anymore =]

David from CodeXplorer:
>> The ONLY reason to use empty() is for code readability. It is the same as an IF/ELSE check.
>> So, don’t bother using EMPTY in the real world.

This is NOT true. empty() will not generate warnings if you’re testing against an undefined variable as a simple boolean check will. On production systems, warnings are usually shut off, but they are often active on development systems.

You could test a flag with
if ( $flagvar ) . ?>
but this can generate a warning if $flagvar is not set.

Instead of
if (isset( $flagvar ) && $flagvar ) . ?>
you can simply use
if (!empty( $flagvar )) . ?>

for easy readability without warnings.

To make an empty function, which only accepts arrays, one can use type-hinting:

// emptyArray :: [a] -> Bool

function emptyArray (array $xs ) <
return empty( $xs );
>
?>

Type hinting is a good thing to use in your code, because it makes it more easy to reason about your code. Besides that, it automatically documents the code.

empty($var) will return TRUE if $var is empty (according to the definition of ’empty’ above) AND if $var is not set.

I know that the statement in the «Return Values» section of the manual already says this in reverse:

«Returns FALSE if var has a non-empty and non-zero value.»

but I was like «Why is this thing returning TRUE for unset variables. «. oh i see now. Its supposed to return TRUE for unset variables.

( ‘error_reporting’ , E_ALL );
ini_set ( ‘display_errors’ , ‘1’ );
empty( $var );
?>

in cases when «0» is not intended to be empty, here is a simple function to safely test for an empty string (or mixed variable):

function _empty ( $string ) <
$string = trim ( $string );
if(! is_numeric ( $string )) return empty( $string );
return FALSE ;
>
?>

Note on the selfmade empty function below:

function_exists() returns false on language constructs and empty is a language construct.


/**
* Used for checking empty objects/array
* @uses How to check empty objects and array in php code
* @author Aditya Mehrotra
*/

/**
* Empty class
*/
class EmptyClass <

$obj = new stdClass ();
//or any other class empty object
$emptyClassObj = new EmptyClass ();
$array = array();

if (empty( $array )) <
echo ‘array is empty’ ; //expected result
> else <
echo ‘array is not empty’ ; //unexpected result
>
echo «
» ;

if (empty( $obj )) <
echo ‘object is empty’ ; //expected result
> else <
echo ‘object is not empty’ ; //unexpected result
>
echo «
» ;

if (empty( $emptyClassObj )) <
echo ‘EmptyClass is empty’ ; //expected result
> else <
echo ‘EmptyClass is not empty’ ; //unexpected result
>
echo «
» ;

//Result SET 1
//array is empty => expected result
//object is not empty => ouch what happened
//EmptyClass is not empty => ouch what happened

/**
* So what we do for checking empty object
* @solution use any known property or check property count
* Or you can use below method
* Count function will not return 0 in empty object
*/

//Below line print «Object count:1»
echo ‘Object count:’ . count ( $obj );

/**
* This function is used to get object item counts
* @function getCount
* @access public
* @param object|array $var
* @return integer
*/
function getCount ( $var ) <
$count = 0 ;
if ( is_array ( $var ) || is_object ( $var )) <
foreach ( $var as $value ) <
$count ++;
>
>
unset( $value );
return $count ;
>

//Running code again with new logic
if ( getCount ( $array ) === 0 ) <
echo ‘array is empty’ ; //expected result
> else <
echo ‘array is not empty’ ; //unexpected result
>
echo «
» ;

if ( getCount ( $obj ) === 0 ) <
echo ‘object is empty’ ; //expected result
> else <
echo ‘object is not empty’ ; //unexpected result
>

if ( getCount ( $emptyClassObj ) === 0 ) <
echo ‘EmptyClass is empty’ ; //expected result
> else <
echo ‘EmptyClass is not empty’ ; //unexpected result
>

//Result SET 2
//array is empty => expected result ##everything is all right
//object is empty => expected result ##everything is all right
//EmptyClass is empty => expected result ##everything is all right

I normally count() an array, so I wanted to see how empty() would stack up.

= array();
$test2 = array();
for ( $x = 0 ; $x 1000 ; $x ++) $test [] = $x ;

$ts = microtime ( true );
for ( $x = 0 ; $x 100000000 ; $x ++)
<
if ( count ( $test ))
<
>
>

echo «Time taken: » . ( microtime ( true ) — $ts ) . » sec\n» ;
?>

For 100,000,000 comparisons, here are the results against PHP 7.2.16 on my hardware:

count($test): 2.697 sec
count($test2): 2.596 sec
$test === array(): 2.579 sec
$test2 === array(): 2.552 sec
empty($test): 3.085 sec
empty($test2): 3.113 sec

In short, it doesn’t matter what method is used although empty() is actually just ever so slightly slower despite it being a language construct. YMMV.

/*»» (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
«0» (0 as a string)
NULL
FALSE
array() (an empty array)*/

$anEmptyString = «» ;
empty( $anEmptyString );
if(empty( $anEmptyString ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

$anIntegerNumber = 0 ;
empty( $anIntegerNumber );
if(empty( $anIntegerNumber ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

$aFloatNumber = 0.0 ;
empty( $aFloatNumber );
if(empty( $aFloatNumber ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

$aZeroValuedString = «0» ;
empty( $aZeroValuedString );
if(empty( $aZeroValuedString ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

$aNULL = NULL ;
empty( $aNULL );
if(empty( $aNULL ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

$aBooleanFALSE = FALSE ;
empty( $aBooleanFALSE );
if(empty( $aBooleanFALSE ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

$anEmptyArray = array();
empty( $anEmptyArray );
if(empty( $anEmptyArray ) == TRUE ) <
echo «TRUE» ;
> else <
echo «FALSE» ;
>
echo » » ; //line break

Note that empty() will return false on null byte. Eg.

// Save to variable, so it works on older PHP versions
$null_byte = chr ( 0 ); // === \0

var_dump (
empty( null ),
empty( $null_byte )
);
/**
* Results:
*
* bool(true)
* bool(false)
*/

If you test an element of an array (like $_POST[‘key]), it test if the key doesn’t exist or if it exist if its value is empty and never emit a warning.

For who don’t want to test what happen if passed an array element here is my test and result.

= array();
$b = array( ‘key’ );
$c = array( ‘key’ => false );
$d = array( ‘key’ => ‘La verdad nos hace libres’ );


echo (empty( $a [ ‘key’ ])? ‘A empty’ : ‘A not empty’ ), ‘ — ‘ , (empty( $b [ ‘key’ ])? ‘B empty’ : ‘B not empty’ ), ‘ — ‘ , (empty( $c [ ‘key’ ])? ‘C empty’ : ‘C not empty’ ), ‘ — ‘ , (empty( $d [ ‘key’ ])? ‘D empty’ : ‘D not empty’ );
?>

And the result is:

A empty — B empty — C empty — D not empty

For the verification of a form, to «block» entries such as a simple space or other, I thought of this combination:

function isEmpty($string) <
$val = preg_replace(‘#[^A-Za-z0-9]+#’, », $string) ;
$val = trim($string, »);
return ($string==») ;
>

This protects entries like: ‘ ‘ ,’ — ‘, ‘. — +’, . On entries like name, profession, . it’s helpful

Note the exceptions when it comes to decimal numbers:

= 0.00 ;
$b = ‘0.00’ ;
echo (empty( $a )? «empty» : «not empty» ); //result empty
echo (empty( $b )? «empty» : «not empty» ); //result not empty
//BUT.
$c = intval ( $b );
echo (empty( $c )? «empty» : «not empty» ); //result empty
?>

For those of you using MySQL, if you have a table with a column of decimal type, when you do a SELECT, your data will be returned as a string, so you’ll need to do apply intval() before testing for empty.

e.g.
TABLE t has columns id MEDIUMINT and d DECIMAL(4,2)
and contains 1 row where > = «SELECT * FROM t» ;
$res = mysql_query ( $q );
$row = mysql_fetch_assoc ( $res );
echo (empty( $row [ ‘d’ ])? «empty» : «not empty» ); //result not empty
?>

When using the php empty() function to check submitted variables such as $_POST or $_GET, be careful to remember that values 0 (integer) and «0» (string with zero character) are all considered empty. eg. in a simple cms a page ID of zero might be used to indicate that the homepage should be displayed but using the following code:

if (isset( $_GET [ ‘pid’ ] && !empty( $_GET [ ‘pid’ ]) <
// assign value to local variable
$pageID = $_GET [ ‘pid’ ];
> else <
echo «missing variable ‘pageID'» ;
>
?>

When attempting to display the homepage using a pid of zero the above code will fail.

So as a result i wrote a small function to replace the php empty() function in situations where you want 0 and «0» not to be considered empty.

function is_empty ( $var , $allow_false = false , $allow_ws = false ) <
if (!isset( $var ) || is_null ( $var ) || ( $allow_ws == false && trim ( $var ) == «» && ! is_bool ( $var )) || ( $allow_false === false && is_bool ( $var ) && $var === false ) || ( is_array ( $var ) && empty( $var ))) <
return true ;
> else <
return false ;
>
>
?>

This function will allow you to test a variable is empty and considers the following values as empty:

an unset variable -> empty
null -> empty
0 -> NOT empty
«0» -> NOT empty
false -> empty
true -> NOT empty
‘string value’ -> NOT empty
» » (white space) -> empty
array() (empty array) -> empty

There are two optional parameters:

$allow_false: setting this to true will make the function consider a boolean value of false as NOT empty. This parameter is false by default.

$allow_ws: setting this to true will make the function consider a string with nothing but white space as NOT empty. This parameter is false by default.

// an unset variable
echo ‘unset variable ($notset) — Empty: ‘ ;
echo is_empty ( $notset ) ? ‘yes
‘ : ‘no
‘ ;
// NULL variable
echo ‘null — Empty: ‘ ;
$var = null ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// integer 0
echo ‘0 — Empty: ‘ ;
$var = 0 ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// string «0»
echo ‘string «0» — Empty: ‘ ;
$var = «0» ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// boolean value false
echo ‘false — Empty: ‘ ;
$var = false ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// allow boolean value false
echo ‘false ($allow_false = true) — Empty: ‘ ;
$var = false ;
echo is_empty ( $var , true ) ? ‘yes
‘ : ‘no
‘ ;
// boolean value true
echo ‘true — Empty: ‘ ;
$var = true ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// string
echo ‘string «foo» — Empty: ‘ ;
$var = «foo» ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// white space
echo ‘white space » » — Empty: ‘ ;
$var = » » ;
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
// allow white space
echo ‘white space ($allow_ws = true) » » — Empty: ‘ ;
$var = » » ;
echo is_empty ( $var , false , true ) ? ‘yes
‘ : ‘no
‘ ;
// empty array
echo ’empty array — Empty: ‘ ;
$var = array();
echo is_empty ( $var ) ? ‘yes
‘ : ‘no
‘ ;
?>

the above code outputs the following:

unset variable ($notset) — Empty: yes
null — Empty: yes
0 — Empty: no
string «0» — Empty: no
false — Empty: yes
false ($allow_false = true) — Empty: no
true — Empty: no
string «foo» — Empty: no
white space » » — Empty: yes
white space ($allow_ws = true) » » — Empty: no
empty array — Empty: yes

Шпаргалка для PHP: FALSE, NULL и значения, с ними связанные

В PHP значения FALSE и NULL и связанные с ними значения отличаются от того, как это обычно в других языках и имеют свои неочевидные особенности.
В статье рассмотрены эти особенности.
Для новичков это может быть полезно для видимости полной картины, для опытных читателей — обновить в памяти, если какой-то ньюанс вылетел из головы.

FALSE в If -выражениях

В соответствии с документацией PHP следующие значения равны FALSE после приведения в тип boolean :

  • само булевское значение FALSE
  • integer 0
  • float 0.0
  • пустая строка (string) ( «» ) и строка «0» .
  • пустой массив (array) – array().
  • an object with zero member variables (только в PHP 4, в статье не рассматривается)
  • специальное значение NULL (включая неустановленные переменные)
  • SimpleXML objects (в данной статье не рассматривается)

Это значит, что если такие значения, передаются в условие:

то будет выведена строка «0» .

Если значение переменной не установлено ( unset ), то еще и может выдаваться предупреждение. Напомним, предупреждение в условии можно убрать, написав перед переменной @ .

Но использовать @ стоит только в крайних случаях, когда вы хорошо подумали и других подходящих вариантов нет. См. функцию isset() .

Функция is_null() и языковые конструкции isset() и empty()

is_null() возвращает TRUE только для переменных, которым не присвоено никакого значения или которым присвоено значение NULL .
isset() возвращает один в один противоположные булевые значения в сравнении с is_null() .
Если переменной не присвоено значение, то is_null() также выдает предупреждение «Undefined variable» , в отличии от isset() , которая не выдает никаких предупреждение.
Напомним, для того, чтобы убрать значение переменной, можно использовать функцию unset(). Также с этой целью можно присвоить значение NULL , чтобы избежать предупреждений компилятора при попытке чтения значения переменной.

Обратите внимание, что в отличии от переменных для работы с константами необходимо использовать конструкцию defined().

С empty() все просто – возвращает TRUE для истинных значений, FALSE – для всех остальных, полностью в соответствии со списком выше, взятым из документации. Кстати, для тех кто будет экспериментировать самостоятельно, в empty() аргументом можно передать только переменную. При попытке передать константу компилятор выдает синтаксическую ошибку.

Индексация массивов

При работе с массивами все ложные значения будут обращаться к одному элементу.
Исключением являются только значения индексов пустой строки ( » ) и NULL — для этих двух значений используется отдельное место в памяти.
Также значение пустого массива array() , как впрочем и любого другого массива, не может быть индексом массива – компилятор выдает предупреждение «Illegal offset type» и значение, соответствующее такому индексу, не устанавливается.

Для того, чтобы индексам пустой строки и NULL соответствовали различные елементы в массиве, можно использовать следующий подход. Опишем функцию:

Далее при установке значений мы получим отдельные индексы для пустой строки и значения NULL , точнее будем эмулировать различные индексы:


Индексы массивов — это отдельная тема. Приведу лишь пример того, что значение с целочисленным индексом $arr[555] совпадает со значением соответствующее строковыму индексу $arr[‘555’] в массиве.

Такие особенности прежде всего связаны с тем, что индексы массивов либо целые, либо строки. Более детальная информация может быть найдена в описании типа массива в руководстве php.

Строковое представление

Расмотрим строковое представление ложных констант.
Например при конкатенации значения преобразуются в следующие строки, приведенные в таблице ниже:

Версия Описание
5.5.0
Значение Строка
FALSE (пустая строка)
0.0
«» (пустая строка)
«0»
array() Array
NULL (пустая строка)
@$undef (пустая строка)

Более подробно тема преобразования в строки описана на официальном сайте в параграфе Converting to string.

Операторы сравнения

Перейдем к операторам сравнения.
Все ложные значения, как и ожидалось, возвращают истину при сравнении со значением FALSE при помощи оператора » == «.
Но не следует здесь расчитывать на транзитивность при сравнении ложных строковых констант между собой.
Приведем полную таблицу сравнения ложных значение (плюсом обозначены элементы таблицы, которые при сравнении с помощью оператора » != » возвращают истинное значение:

!= FALSE 0.0 «» «0» array() NULL @$undef
FALSE
+
0.0 +
«» + +
«0» + + + +
array() + + + +
NULL +
@$undef +

$undef –переменная, которой не присваивалось значение

Из таблицы можно сделать некоторые приятные выводы:
1. Если мы знаем, что у нас используются только строки, то мы их можем спокойно сравнивать и не беспокоиться, что «» (пустая строка) будет равна «0» .
2. Массивы никогда не равны строкам, целым и действительным числам.

Поскольку тип различных ложных констант разный, то для того, чтобы их отличать можно использовать пару операторов === и !== .
Оператор === возвращает ложное значение для всех пар ложных значений.
Истинное значение возвращает лишь для аргументов, одному из которых присвоено значение NULL, а второму не присвоено никакого значения.

Отличие переменных с NULL значением и неопределенных переменных

Оператор === позволяет различать все ложные значения, кроме как переменных с NULL-значением от переменных, которым значение не присваивалось.

Такие переменные можно отличить с помощью функции get_defined_vars().

Если нужно определить, было ли присвоено значение переменной $var , то для этого может быть использован следующий фрагмент код:

Выводы

Всегда нужно помнить, что в PHP два ложных значения могут быть не равны между собой, а переменные, которые, на первый взгляд, разные, могут оказаться одинаковыми при сравнении. Чтобы избежать таких сюрпризов, можно воспользоваться операторами === и !== .

При работе с массивами, во избежание сюрпризов, можно написать функцию конвертирования значений в гарантированно различные индексы. После этого к элементам массива обращаться только с ее помощью. Это может замедлить работу программы, но поможет избежать сюрпризов.

В чем отличие isset от empty ?

16.07.2012, 19:43

Не разберусь с isset и empty
Здравствуйте. Необходимо проверить вводимые данные. Isset не совсем подходит, так как проверяет.

В чем разница между !empty и empty?
И парочку примеров для лучшего понимания, если не сложно

Чем отличается if(.) от if(isset(.)
Здравствуйте Помогите разобраться. Например, есть переменная $product_discount чем отличается.

Как определить Empty или не Empty массив?
Добрый вечер! Встрял в ситуацию. Заполняю массив в цикле значениями из базы данных вот так .

16.07.2012, 20:45 2 16.07.2012, 22:16 3 16.07.2012, 22:17

и отличие от моего кода? в методе гет вместо пост?)

Меню пользователя KOPOJI
16.07.2012, 22:18 5 17.07.2012, 16:39 [ТС] 6

KOPOJI, т.е. empty проверяет и есть ли переменная и есть ли пустота? А isset проверяет только есть ли переменная? тогда почему в моем примере в условии он выводит true:

$_SESSION[‘uid’] Такой переменной даже нет, ну т.е. $_SESSION -есть а $_SESSION[‘uid’] нет,Если поставлю isset то в условии будет false.
А также заметил странность при том когда [uid] => 3 ,условие выдает false т.е. выбирает conf ,может empty выдает обратные значения true и false ?

Добавлено через 2 часа 30 минут
что нужно поставть в $_COOKIE[‘uid’] чтобы это условие выдало труе:

Применение string.Empty

Зачем применять string.Empty , или в чем его отличие от «» ? И в том, и в другом случаях результат — пустая строка.

На MSDN про первый вариант сказано :

Значением данного поля является строка нулевой длины, «».

Т.е. то же самое «» .
Насколько знаю, Empty используется только со строками, и полностью повторяет «» , но ведь зачем-то его в язык ввели. Кто знает зачем?

1 ответ 1

В .NET2.0+ нет разницы (в плане оптимизации) какой вариант использовать для присваивания и сравнения. Какой считаете более уместным, тот и используйте.

Однако так как string.Empty — это readonly -поле, а «» — это константа, то в некоторых ситуациях можно использовать только «» :

В качестве значения по умолчанию параметра метода:

Error: Default parameter value for ‘value’ must be a compile-time constant

В case в switch :

Error: A constant value is expected.

В параметрах атрибута:

Error: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL