В чем разница между нулем и пустым? - PullRequest
11 голосов
/ 11 апреля 2011

Я новичок в концепции пустого и нулевого.Хотя я пытался понять разницу между ними, я больше запутался.Я наткнулся на статью в http://www.tutorialarena.com/blog/php-isset-vs-empty.php, но до сих пор не вижу, когда вы будете использовать isset и пустые при проверке форм.Видя, что я не понимаю разницу, я не хочу использовать неправильные функции, а также не могу использовать функции в других областях.Может кто-нибудь привести примеры, которые помогут мне понять?Я очень плохо знаком с программированием, поэтому был бы признателен, если бы кто-нибудь мог привести мне примеры из реального мира и в то же время оставить его достаточно простым, чтобы нуб следовал ему.

Ответы [ 9 ]

18 голосов
/ 11 апреля 2011

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

empty() - это более буквальное значение пусто , например, строка "" пусто, но не NULL.

Следующие вещи считаются пустыми:

  • "" (пустая строка)
  • 0 (0 в виде целого числа)
  • 0.0 (0 в виде числа с плавающей запятой)
  • "0" (0 в виде строки)
  • NULL
  • FALSE
  • array () (пустой массив)
  • var $ var;(объявленная переменная, но без значения в классе)

Источник .


Пример

$a равно NULL.

$a = '' равно пусто , но не NULL.


Обновление

Если $a='' пусто, но не NULL, когда я использую функцию empty() и когда я использую функцию isset().

isset() вернет FALSE, если переменная указывает на NULL.

Используйте empty(), когда вы понимаете, что такое пусто (посмотрите на список выше).

Также, когда вы говорите, что это не указывает нигде в памяти, что это значит точно?

Это означает, что$str = '' будет находиться в памяти как строка длиной 0.

Если бы она была $str = NULL, она не занимала бы какую-либо память.

7 голосов
/ 11 апреля 2011

Нуль - это заполнитель, который обычно означает "данные об этом недоступны".

Использование null для этого является всего лишь соглашением, но довольно распространенным, так что некоторые языки программирования поддерживают соглашение непосредственно. Причина, по которой это соглашение существует, ИМХО исторически связана с «указателями»; во многих случаях будет определена процедура для возврата указателя на ответ, и она будет возвращать то, что традиционно называется нулевым указателем, если по какой-либо причине не может дать ответ.

Пусто означает (если это набор), что у него нет членов. Это явный ответ, и он сильно отличается от того, что «никаких данных об этом нет».

В мире PHP явно неинициализированные переменные имеют значение Null, и isset для такой переменной возвращает FALSE. Для массивов и строк PHP следует соглашению, согласно которому «пусто» означает «не имеет членов», хотя массивы и строки технически не установлены.

У PHP очевидно есть забавная идея, что 0 и 0.0 также «пустые», согласно дизайну PHP. Это оскорбительно для понятия «пустое» ИМХО: отдельные числа не являются множествами, поэтому 0 не может быть разумно «пустым». Это просто приводит к неясному программированию, потому что оно нарушает принцип наименьшего удивления. Я уверен, что дизайнеры PHP считают, что «ноль - это пустое число», как некая расплывчатая аналогия; но если аналогия расплывчата, зачем ее беспокоить? Но тогда PHP полон глупых идей.

5 голосов
/ 17 февраля 2015

Таблица ниже представляет собой простую ссылку на то, что эти функции будут возвращать для различных значений.Пробелы означают, что функция возвращает bool (false).enter image description here

см. Эту ссылку для более https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

1 голос
/ 11 апреля 2011

Здесь есть несколько хороших ответов, которые я не буду повторять.Однако в случае проверки форм при отправке формы значение каждого элемента ввода формы отправляется на сервер в переменной $_POST.Вы можете проверить наличие определенного ввода, используя isset().

isset($_POST['username'])

Если это возвращает true, то этот запрос на сервер был результатом отправки формы, содержащей элемент ввода с именем "username».Теперь, когда мы знаем, что у нас есть значение для этого элемента формы, мы можем видеть, имеет ли оно допустимое значение.empty() сообщит нам, действительно ли пользователь ввел какие-либо данные в поле или они оставили их пустыми.

empty($_POST['username'])

Если это возвращает true, то в форме, отправленной на сервер, есть поле с именем «username»."но пользователь ничего не вводил до отправки формы.

1 голос
/ 11 апреля 2011

NULL - это специальное значение, которое явно указывает, что для переменной еще не задано какое-либо значение. Будьте осторожны с использованием функции empty(), так как вы не можете просто определить, что переменная точно равна NULL, используя ее. Например, функция empty() вернет true, если для int установлено значение 0. Если вам нужно убедиться, что переменная точно равна NULL, используйте if($variable == NULL).

Подробнее о empty() см. http://php.net/manual/en/function.empty.php

0 голосов
/ 02 ноября 2017

Эту концепцию можно лучше понять из математики. Вы когда-нибудь пробовали делить число (не ноль) на 0 с помощью калькулятора, например, 7/0? Вы получите результат, который выглядит примерно так: undefined, not a number, null и т. Д. Это означает, что операция невозможна по некоторым причинам (давайте оставим эти причины для обсуждения в другой день).

Теперь выполните это: 0/7. Вы получите вывод 0. Это означает, что операция возможна и может быть выполнена, но вы ответите просто 0, потому что после деления ничего не осталось. Имеется действительный вывод, и этот вывод равен нулю.

В первом примере вывод был не только недействителен, но и операция была невозможна. Это сродни null. Второй пример похож на empty.

0 голосов
/ 11 апреля 2011

isset() возвращает true, если выполняются оба эти условия:

  1. Переменная была определена и еще не установлена.
  2. Переменная содержит ненулевое значение.

Переменная определяется автоматически, когда она устанавливается на что-то (включая ноль). Это имеет прямое следствие в массивах.

$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 голосов
/ 11 апреля 2011

empty() - это хороший быстрый способ проверить, содержит ли переменная какую-либо полезную информацию ... для строк empty() возвращает true для строки "", а также для пустой строки.

Таким образом, вы можете написать что-то вроде этого:

if (! empty($name)) echo $name;

Подробнее см. Здесь: PHP: empty ()

0 голосов
/ 11 апреля 2011

Прошло некоторое время, так как я использовал PHP, но если другие языки будут пустыми, это будет указывать на существующий объект / карту / массив, который не имеет содержимого, в то время как null будет указывать на переменную, которая вообще не имеет значения / определения (не инициализирована).

В базе данных SQL NULL означает «нет значения».

...