Php null что это значит

Содержание
  1. Что такое null и как с этим жить: сравнение с null в PHP, тонкости в приведении типов данных
  2. Математические операции с null
  3. Проверка переменной на null
  4. Проверка null if-выражениях, а так же в функциях empty() и isset()
  5. Сравнение двух null
  6. Поведение null при нетождественном сравнении с приведением типов данных
  7. Сравнение с null с помощью >, =, PHP -> JavaScript) поведение null может меняться.
  8. Простое правило при работе null, которое помогает избегать проблем
  9. FALSE, NULL и пустые значения — проверка условий и работа с ними
  10. Небольшое описание примеров проверки выполнения условий на PHP. Данный материал поможет разобраться Вам в понимании механизма работы проверки условий на PHP для разных типов переменных
  11. FALSE в If-выражениях
  12. Функция is_null() и языковые конструкции isset() и empty()
  13. Индексация массивов
  14. Строковое представление
  15. Операторы сравнения
  16. Выводы
  17. Php null что это значит
  18. is_null
  19. Описание
  20. Список параметров
  21. Возвращаемые значения
  22. Примеры
  23. Смотрите также
  24. User Contributed Notes 9 notes

Что такое null и как с этим жить: сравнение с null в PHP, тонкости в приведении типов данных

В работе с любыми данными то и дело требуется как-то обозначить их отсутствие. Новички зачастую для этой цели используют значение false, которое, по сути, является не отсутствием данных, а определённым значением типа boolean. Для того, чтобы как-то помечать неопределённость или отсутствие данных, существует специальное значение null. Про false, null и прочее уже немало сказано и добавить что-то оригинальное крайне сложно. Но гораздо сложнее бывает найти баг, вызванный неочевидным поведением этих штуковин. Поэтому, вдохновлённый одним таким багом, самым элегантным в моём послужном списке, я решил написать маленькую шпаргалку на эту тему.

Читайте также:  Меньжеваться что это значит

Перегружать пост интересными, но довольно-таки бесполезными определениями из Википедии я не стану. Вместо этого перейду сразу к делу и приведу цитату со страницы php.net, посвящённой null:

Специальное значение NULL представляет собой переменную без значения. NULL — это единственно возможное значение типа null. Переменная считается null, если:

  • ей была присвоена константа NULL.
  • ей еще не было присвоено никакого значения.
  • она была удалена с помощью unset().

До этого момента всё кажется простым, но чтобы так оставалось и дальше, при работе с null нужно придерживаться определённых правил.

Математические операции с null

Во всех математических операциях null ведёт себя аналогично int(0):

Проверка переменной на null

Чтобы точно узнать, что переменная содержит null (то есть, ничего не содержит), нужно использовать либо специальную функцию is_null() либо тождественное сравнение ===, а любые другие способы не подойдут:

Проверка null if-выражениях, а так же в функциях empty() и isset()

Тут переменные с null ведут себя абсолютно предсказуемо, как и любые другие ложные значения (которые в if-выражениях приводятся к false). Но нужно помнить, что это не гарантирует нам, что в переменной находится именно null:

Сравнение двух null

В PHP как гибкое, так и тождественное сравнение двух null всегда возвращает false, в отличие от многих других платформ, где сравнение двух неизвестностей возвращает так же неизвестность (то есть, null).

Поведение null при нетождественном сравнении с приведением типов данных

PHP разрешает сравнивать null-ы не только между собой, но и с другими типами данных. При этом не стоит забывать, что гибкое сравнение в php не является транзитивным, то есть, если два значения равны третьему по отдельности, не гарантирует их равенство между собой. Согласно таблицам приведения типов, гибкое сравнение null при помощи оператора == с разными значениями возвращает разные результаты:

Сравнение с null с помощью >, =, PHP -> JavaScript) поведение null может меняться.

Исследование null в JavaScript (а вместе с ним и загадочного undefined) заслуживает отдельной статьи. Главное отличие состоит в том, что, не смотря на приведение типов, null в JavaScript ничему не равен, кроме самого null и этого самого undefined, хотя в if-выражениях и срабатывает аналогично false. А при сравнении с числами он выдаёт ещё более забавные результаты, чем в PHP.

NULL в MySQL, к примеру, действует гораздо более прямолинейно. Он просто при любых действиях с null (даже при сравнении двух null) возвращает null. С его точки зрения, при любых действиях с неизвестностью в результате получится какая-то другая неизвестность 🙂

Простое правило при работе null, которое помогает избегать проблем

Вообще-то, не стоило читать этот пост. Держать в голове все эти нюансы, которые разные платформы трактуют по-разному, — неблагодарное занятие. Для того, чтобы избежать проблем с null нужно запомнить всего лишь одно правило:

Источник

FALSE, NULL и пустые значения — проверка условий и работа с ними

Небольшое описание примеров проверки выполнения условий на PHP. Данный материал поможет разобраться Вам в понимании механизма работы проверки условий на PHP для разных типов переменных

Небольшое описание примеров проверки выполнения условий на PHP.

Данный материал поможет разобраться Вам в понимании механизма работы проверки условий на PHP для разных типов переменных

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.

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

Расмотрим строковое представление ложных констант.

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

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

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

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

Перейдем к операторам сравнения.

Все ложные значения, как и ожидалось, возвращают истину при сравнении со значением FALSE при помощи оператора «==».

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

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

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

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

Из таблицы можно сделать некоторые приятные выводы:

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

2. Массивы никогда не равны строкам, целым и действительным числам.

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

Оператор === возвращает ложное значение для всех пар ложных значений.

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

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

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

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

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

Выводы

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

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

Источник

Php null что это значит

I would like to add for clarification that:

—$x;
// $x is still NULL.
// Decrementing NULL, using Decrement Operator, gives NULL.

$x-=1;
// $x is now int(-1).
// This actually decrements value by 1.

On the other hand, Incrementation works simply as expected.
Hope this helps 🙂

NULL is supposed to indicate the absence of a value, rather than being thought of as a value itself. It’s the empty slot, it’s the missing information, it’s the unanswered question. It’s not a jumped-up zero or empty set.

This is why a variable containing a NULL is considered to be unset: it doesn’t have a value. Setting a variable to NULL is telling it to forget its value without providing a replacement value to remember instead. The variable remains so that you can give it a proper value to remember later; this is especially important when the variable is an array element or object property.

It’s a bit of semantic awkwardness to speak of a «null value», but if a variable can exist without having a value, the language and implementation have to have something to represent that situation. Because someone will ask. If only to see if the slot has been filled.

Note: Non Strict Comparison ‘==’ returns bool(true) for

Note that NULL works like a magic object with any attribute you can name, but they are all NULL:

foreach ( [ null, null ] as $person ) <
$friends[] = [ ‘Name’=>$person[‘name’], ‘Phone’=>$person[‘cell’] ];
>

This means that:
* NULL == NULL[‘foo’][‘bar’][‘whatever’]

This can be slightly confusing if you accidentally slip a NULL into an array of other items.

Pay attention then using operator — on NULL values:

$x = null;
—$x; // $x is NULL
$x—; // still NULL
$x -= 1; // $x is -1

On other side for ++ everything works fine:

Источник

is_null

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

is_null — Проверяет, является ли значение переменной равным null

Описание

Проверяет, является ли значение данной переменной равным null .

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

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

Возвращает true , если значение value равно null , или false в противном случае.

Примеры

Пример #1 Пример использования is_null()

$foo = NULL ;
var_dump ( is_null ( $inexistent ), is_null ( $foo ));

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

  • Тип null
  • isset() — Определяет, была ли установлена переменная значением, отличным от null
  • is_bool() — Проверяет, является ли переменная булевой
  • is_numeric() — Проверяет, является ли переменная числом или строкой, содержащей число
  • is_float() — Проверяет, является ли переменная числом с плавающей точкой
  • is_int() — Проверяет, является ли переменная целым числом
  • is_string() — Проверяет, является ли переменная строкой
  • is_object() — Проверяет, является ли переменная объектом
  • is_array() — Определяет, является ли переменная массивом

User Contributed Notes 9 notes

Micro optimization isn’t worth it.

You had to do it ten million times to notice a difference, a little more than 2 seconds

$a===NULL; Took: 1.2424390316s
is_null($a); Took: 3.70693397522s

difference = 2.46449494362
difference/10,000,000 = 0.000000246449494362

The execution time difference between ===NULL and is_null is less than 250 nanoseconds. Go optimize something that matters.

See how php parses different values. $var is the variable.

$var = NULL «» 0 «0» 1

strlen($var) = 0 0 1 1 1
is_null($var) = TRUE FALSE FALSE FALSE FALSE
$var == «» = TRUE TRUE TRUE FALSE FALSE
!$var = TRUE TRUE TRUE TRUE FALSE
!is_null($var) = FALSE TRUE TRUE TRUE TRUE
$var != «» = FALSE FALSE FALSE TRUE TRUE
$var = FALSE FALSE FALSE FALSE TRUE

In PHP 7 (phpng), is_null is actually marginally faster than ===, although the performance difference between the two is far smaller.

PHP 5.5.9
is_null — float(2.2381200790405)
=== — float(1.0024659633636)
=== faster by

PHP 7.0.0-dev (built: May 19 2015 10:16:06)
is_null — float(1.4121870994568)
=== — float(1.4577329158783)
is_null faster by

For what I realized is that is_null($var) returns exactly the opposite of isset($var) , except that is_null($var) throws a notice if $var hasn’t been set yet.

the following will prove that:

= array( null , true , false , 0 , 1 , » , «\0» , «unset» );

foreach( $quirks as $var ) <
if ( $var === «unset» ) unset( $var );

echo is_null ( $var ) ? 1 : 0 ;
echo isset( $var ) ? 1 : 0 ;
echo «\n» ;
>

?>

this will print out something like:

10 // null
01 // true
01 // false
01 // 0
01 // 1
01 // »
01 // «\0»
Notice: Undefined variable: var in /srv/www/htdocs/sandbox/null/nulltest.php on line 8
10 // (unset)

For the major quirky types/values is_null($var) obviously always returns the opposite of isset($var), and the notice clearly points out the faulty line with the is_null() statement. You might want to examine the return value of those functions in detail, but since both are specified to return boolean types there should be no doubt.

A second look into the PHP specs tells that is_null() checks whether a value is null or not. So, you may pass any VALUE to it, eg. the result of a function.
isset() on the other hand is supposed to check for a VARIABLE’s existence, which makes it a language construct rather than a function. Its sole porpuse lies in that checking. Passing anything else will result in an error.

Knowing that, allows us to draw the following unlikely conclusion:

isset() as a language construct is way faster, more reliable and powerful than is_null() and should be prefered over is_null(), except for when you’re directly passing a function’s result, which is considered bad programming practice anyways.

Источник

Оцените статью