Я новичок в концепции пустого и нулевого. Хотя я пытался понять разницу между ними, я еще больше запутался. Я наткнулся на статью по адресу http://www.tutorialarena.com/blog/php-isset-vs-empty.php однако я до сих пор не вижу, когда вы будете использовать isset и empty при проверке форм. Видя, что я не понимаю разницы, я не хочу использовать неправильные функции, а также не могу использовать функции в других областях. Может ли кто-нибудь привести примеры, которые помогут мне понять? Я очень новичок в кодировании, поэтому был бы признателен, если бы кто-нибудь мог привести мне примеры из реального мира и в то же время сделать его достаточно простым для новичков.
В чем разница между нулем и пустым?
Ответы (9)
Переменная имеет значение NULL
, если она не имеет значения и указывает в никуда в памяти.
empty()
— это более буквальное значение слова пусто, например. строка ""
пуста, но не NULL
.
Пустыми считаются следующие вещи:
- "" (пустая строка)
- 0 (0 как целое число)
- 0,0 (0 как число с плавающей запятой)
- "0" (0 в виде строки)
- НУЛЕВОЙ
- ЛОЖНЫЙ
- array() (пустой массив)
- вар $вар; (объявлена переменная, но без значения в классе)
Пример
$a
is NULL
.
$a = ''
пусто, но не NULL
.
Обновлять
Если
$a=''
пусто, но неNULL
, когда я использую функциюempty()
и когда я использую функциюisset()
.
isset()
вернет FALSE
, если переменная указывает на NULL
.
Используйте empty()
, когда понимаете, что является пустым (посмотрите на список выше).
Кроме того, когда вы говорите, что это никуда не указывает в памяти, что именно это означает?
Это означает, что $str = ''
будет храниться в памяти в виде строки длиной 0.
Если бы это было $str = NULL
, оно не занимало бы никакой памяти.
empty()
в этой ситуации. Вы должны получать строки только из отправленной пользователем формы. Может быть целесообразно сначала trim()
значение, иначе строка, состоящая из пробелов, не будет пустой.
- person alex; 11.04.2011
!
. Затем он читается, если если не пусто...
- person alex; 11.04.2011
Null – это заполнитель, который обычно означает "данные об этом отсутствуют".
Использование null для этого является просто соглашением, но довольно широко распространенным, до такой степени, что некоторые языки программирования напрямую поддерживают это соглашение. Причина, по которой существует это соглашение, ИМХО исторически связана с «указателями»; много раз процедура будет определена для возврата указателя на ответ и будет возвращать то, что традиционно называется нулевым указателем, если по какой-то причине она не может дать ответ.
Пусто означает (если это набор), что в нем нет членов. Это явный ответ, и он сильно отличается от «нет данных об этом».
В мире PHP явно неинициализированные переменные имеют значение Null, и isset для такой переменной возвращает FALSE. Для массивов и строк PHP следует соглашению, согласно которому «пустой» означает «не имеет элементов», хотя технически массивы и строки не являются наборами.
У PHP, по-видимому, есть эта забавная идея, что 0 и 0.0 также «пусты» по дизайну PHP. ИМХО, это злоупотребление концепцией «пустой»: отдельные числа не являются наборами, поэтому 0 не может быть разумно «пустым». Это просто приводит к неясному программированию, потому что нарушает принцип наименьшего удивления. Я уверен, что разработчики PHP сочли бы, что «ноль — это пустое число» в качестве какой-то расплывчатой аналогии; но если аналогия расплывчата, то зачем с ней возиться? Но тогда PHP полон глупых идей.
Приведенная ниже таблица является простой ссылкой на то, что эти функции будут возвращать для разных значений. Пробелы означают, что функция возвращает логическое значение (false).
перейдите по этой ссылке для получения дополнительной информации https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
NULL — это специальное значение, которое явно указывает, что переменной еще не было присвоено какое-либо значение. Будьте осторожны с использованием функции empty()
, так как вы не можете просто определить, что переменная имеет точное значение NULL, используя ее. Например, функция empty()
вернет значение true, если для int установлено значение 0. Если вам нужно убедиться, что переменная точно равна NULL
, используйте if($variable == NULL)
.
Для получения дополнительной информации о empty()
см. http://php.net/manual/en/function.empty.php
Здесь есть несколько хороших ответов, которые я не буду повторять. Однако в случае проверки форм при отправке формы значение каждого элемента ввода формы отправляется на сервер в переменной $_POST
. Вы можете проверить наличие определенного ввода, используя isset()
.
isset($_POST['username'])
Если это возвращает true, то этот запрос к серверу был результатом публикации формы, содержащей элемент ввода с именем «имя пользователя». Теперь, когда мы знаем, что у нас есть значение для этого элемента формы, мы можем проверить, имеет ли оно допустимое значение. empty()
сообщит нам, действительно ли пользователь ввел какие-либо данные в поле или оставил его пустым.
empty($_POST['username'])
Если это возвращает true, то в форме, отправленной на сервер, было поле с именем «имя пользователя», но пользователь ничего не вводил перед отправкой формы.
empty()
вернет true в любом случае, что и isset()
. Какой из них вы используете, зависит от семантики, которую вы тестируете в данный момент.
- person Andrew Cooper; 11.04.2011
empty()
. Если вы хотите проверить, действительно ли форма была отправлена или что форма содержит определенное поле, вам нужно проверить, действительно ли существует переменная POST, поэтому вы используете isset()
.
- person Andrew Cooper; 11.04.2011
Прошло некоторое время с тех пор, как я использовал PHP, но если другие языки пусты, это укажет на существующий объект/карту/массив, который не имеет содержимого, в то время как null укажет на переменную, которая вообще не имеет значения/определения (неинициализированная).
В SQL базы данных NULL означает «нет значения».
empty()
- это хороший быстрый способ узнать, содержит ли переменная какую-либо полезную информацию... то есть для строк empty()
возвращает true как для строки "", так и для нулевой строки.
Итак, вы можете написать что-то вроде этого:
if (! empty($name)) echo $name;
Подробнее см. здесь: PHP: empty()
isset()
возвращает true, если выполняются оба этих условия:
- Переменная была определена и еще не была отменена.
- В переменной есть ненулевое значение.
Переменная определяется автоматически, когда ей присваивается значение (включая null). Это имеет прямое отношение к массивам.
$a=array();
$a['randomKey']=true;
$a['nullKey']=null;
var_dump(isset($a['randomKey'])); // true
var_dump(isset($a['nullKey'])); // true, the key has been set, set to null!
var_dump(isset($a['unsetKey'])); // false !
unset($a['randomKey']);
var_dump(isset($a['randomKey'])); // false ! it's been unset!
Сверху вы можете проверить, установлены ли различные поля $_POST. Например, страница, на которую была отправлена информация, имеет имя кнопки отправки в поле $_POST.
empty()
, с другой стороны, проверяет, содержит ли переменная ненулевое значение. Это означает, что значения, которые (int) приводятся к 0, также возвращают false. Вы можете использовать это, чтобы увидеть, есть ли в конкретном поле $_POST данные.
Эту концепцию можно лучше понять из математики. Вы когда-нибудь пытались разделить число (не ноль) на 0 с помощью калькулятора, например, 7/0? Вы получите результат, который выглядит примерно так: undefined
, not a number
, null
и т. д. Это означает, что операция невозможна по некоторым причинам (давайте оставим эти причины для обсуждения в другой раз).
Теперь выполните следующее: 0/7. Вы получите на выходе 0. Это означает, что операция возможна и может быть выполнена, но вы ответите просто 0, потому что после деления ничего не остается. Есть действительный вывод, и этот вывод равен нулю.
В первом примере не только вывод был неверным, но и операция не могла быть выполнена. Это похоже на null
. Второй пример похож на empty
.