is_null
Проверяет, является ли значение данной переменной равным null .
Список параметров
Возвращаемые значения
Возвращает true , если значение value равно null , или false в противном случае.
Примеры
Пример #1 Пример использования is_null()
$foo = NULL ;
var_dump ( is_null ( $inexistent ), is_null ( $foo ));
Notice: Undefined variable: inexistent in . bool(true) bool(true)
Смотрите также
- Тип null
- isset() — Определяет, была ли установлена переменная значением, отличным от null
- is_bool() — Проверяет, является ли переменная булевой
- is_numeric() — Проверяет, является ли переменная числом или строкой, содержащей число
- is_float() — Проверяет, является ли переменная числом с плавающей точкой
- is_int() — Проверяет, является ли переменная целым числом
- is_string() — Проверяет, является ли переменная строкой
- is_object() — Проверяет, является ли переменная объектом
- is_array() — Определяет, является ли переменная массивом
User Contributed Notes 9 notes
15 years ago
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.
14 years ago
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
8 years ago
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 ~100ns per call
PHP 7.0.0-dev (built: May 19 2015 10:16:06)
is_null — float(1.4121870994568)
=== — float(1.4577329158783)
is_null faster by ~5ns per call
1 year ago
A quick test in 2022 on PHP 8.1 confirms there is still no need to micro-optimize NULL checks:
// Comparison Operator
$before = microtime ( true );
$var = null ;
for ( $i = 0 ; $i < 1000000000 ; $i ++) if( $var === null ) <>
>
$after = microtime ( true );
echo ‘ ===: ‘ . ( $after — $before ) . » seconds\n» ;
// Function
$before = microtime ( true );
$var = null ;
for ( $i = 0 ; $i < 1000000000 ; $i ++) if( is_null ( $var )) <>
>
$after = microtime ( true );
echo ‘is_null: ‘ . ( $after — $before ) . » seconds\n» ;
// ===: 4.1487579345703 seconds
// is_null: 4.1316878795624 seconds
15 years ago
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:
$quirks = 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.
11 years ago
Using === NULL instead of is_null(), is actually useful in loaded server scenarios where you have hundreds or thousands of requests per second. Saving microseconds on a lot of «simple» operations in the entire PHP execution chain usually results in being able to serve more pages per second at the same speed, or lowering your cpu usage. People usually write very bad and slow code.
15 years ago
$var===NULL is much faster than is_null($var) (with the same result)
I did some benchmarking with 10 million iterations:
$a=null;
isset($a); Took: 1.71841216087s
$a==NULL; Took: 1.27205181122s
$a===NULL; Took: 1.2424390316s
is_null($a); Took: 3.70693397522s
$a=5;
isset($a); Took: 1.15165400505s
$a==NULL; Took: 1.41901302338s
$a===NULL; Took: 1.21655392647s
is_null($a); Took: 3.78501200676s
error_reporting(E_ALL&~E_NOTICE);
unset($a);
isset($a); Took: 1.51441502571s
$a==NULL; Took: 16.5414860249s
$a===NULL; Took: 16.1273870468s
is_null($a); Took: 23.1918480396s
Please note, that isset is only included because it gives a good performance in any case; HOWEVER isset is NOT the same, or the opposite.
But you might be able to use isset() instead of null-checking.
You should not use is_null, except when you need a callback-function, or for conformity with is_int, is_float, etc.
2 years ago
I’ve found that for HTTP requests such as POST, is_null isn’t the most reliable choice for checking if empty.
if(trim($var) == «») // do something
>
I think the request does something to the input that makes it definitely not NULL.
19 years ago
Regarding avoidance of NULLs in your MySQL queries, why not use IS NULL and IS NOT NULL in your WHERE clauses.
SELECT *
FROM someDatabase
WHERE someAttribute IS NOT NULL
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
empty
Проверяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или её значение равно FALSE . empty() не генерирует предупреждение если переменная не существует.
Список параметров
Замечание:
До PHP 5.5 empty() проверяет только переменные, и попытка проверить что-то еще вызовет ошибку синтаксиса. Другими словами, следующий код не будет работать: empty(trim($name)). Используйте вместо него trim($name) == false.
Если переменная не существует, предупреждение не генерируется. Это значит, что empty() фактически является точным эквивалентом конструкции !isset($var) || $var == false
Возвращаемые значения
Возвращает FALSE , если var существует, и содержит непустое и ненулевое значение. В противном случае возвращает TRUE .
- «» (пустая строка)
- 0 (целое число)
- 0.0 (дробное число)
- «0» (строка)
- NULL
- FALSE
- array() (пустой массив)
- $var; (переменная объявлена, но не имеет значения)
Список изменений
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() .
$expected_array_got_string = ‘somestring’ ;
var_dump (empty( $expected_array_got_string [ ‘some_key’ ]));
var_dump (empty( $expected_array_got_string [ 0 ]));
var_dump (empty( $expected_array_got_string [ ‘0’ ]));
var_dump (empty( $expected_array_got_string [ 0.5 ]));
var_dump (empty( $expected_array_got_string [ ‘0.5’ ]));
var_dump (empty( $expected_array_got_string [ ‘0 Mostel’ ]));
?>?php
Результат выполнения данного примера в PHP 5.3:
bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)
Результат выполнения данного примера в PHP 5.4:
bool(true) bool(false) bool(false) bool(false) bool(true) bool(true)
Примечания
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.
Замечание:
При использовании функции empty() на недоступных (необъявленных) свойствах объекта будет вызван встроенный метод объекта __isset(), если он определен.
Смотрите также
- isset() — Определяет, была ли установлена переменная значением отличным от NULL
- __isset()
- unset() — Удаляет переменную
- array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
- count() — Подсчитывает количество элементов массива или что-то в объекте
- strlen() — Возвращает длину строки
- Таблица сравнения типов
Как проверить переменную на пустоту php
У нас будет несколько переменных, которые будут иметь разное значение ив том числе будут пустыми, не существовать, либо иметь внутри пробел.
Переменные для проверки на пустоту в php
Если — $primer не существует.
Если $primer =»Здесь есть текст»;
Перечислим все проверки, которые будут проходить переменные на пустоту в том числе :
Первым -> мы получим var_dump переменной, тип и значение — это самый надежный способ узнать, что же внутри перменной!
var_dump($primer);
isset -> определяет, установлена ли переменная
if(isset($primer))
else
echo $isset_primer;$isset_primer>
empty -> Проверяет, пуста ли переменная
if(empty ($primer))
else
echo $empty_primer ;$empty_primer>
if($primer)-> если переменная, часто употребляемая проверка
if($primer)
else
echo $is_primer;$is_primer=>
if(trim($primer))
if(trim($primer))-> тоже самое, что и предыдущий пункт, только добавим «trim»
if(trim($primer))
else
echo $trim_primer;$trim_primer=>
if($primer == false)
if($primer == false)-> если переменная равна false по значению
if($primer == false)
else
echo $false_primer;$false_primer=>
if($primer === false
if($primer === false)-> если переменная равна false по значению и по типу
if($primer === false)
else
echo $false_primer;$false_primer=>
if($primer == true)
if($primer == true)-> если переменная равна true по значению
if($primer == true)
else
echo $true_primer;$true_primer=>
if($primer === true
if($primer === true)-> если переменная равна true по значению и по типу
if($primer === true)
else
echo $true_primer2 ;$true_primer2>
Проверим переменную если она ничему не равна
В первом пункте, с жими проверками на пустоту, разложим все по пунктам и сделаем вывод, что это значит. Для остальных путов, приведем только результат!
Выше мы перечислили все возможные проверки, которые только можно придумать, чтобы понять, что же вернет та или иная конструкция на разные переменные, о которых мы говорили в самом начале.
Первая по списку, это переменная, которую можно назвать пустой. Которая равна «ничему».
Я делал что-то похожее с true, false, null
Результаты проверок, на пустоту, если в переменной ничего нет
пустая переменная, как бы странно это не звучало, но имеет тип string и значение 0
isset нам говорит, что переменная существует. функция физически не может вам сказать, пустая или не пустая переменная!
empty нам говорит, что переменная пустая.
проверка по условие «есть ли» говорит, что переменная пустая.
при использовании, результат аналогичен предыдущему, здесь это не видно, но в примере 2 эти два пункта будут отличаться!
Правильная проверка на пустоту переменной?
Можете сказать как правильно делать проверку на пустоту переменной?
А точнее, нужно сделать проверку, что бы переменная не была пустой. Ну у каждой проверки я нашел минус, поэтому скажите как правильно проверять переменную?
$text = $_POST[‘text’];
if (isset($text)) <> //если переменная ровна пустоте, то проверка проходит
if (!empty($text)) <> //если переменная равна 0 0.0 ‘0’ то проверка не проходит
if ($text !== ») <> //если переменная равна null то проверка проходит
if ($text) <> //если переменная равна 0 0.0 ‘0’ то проверка не проходит
Как правильно проверять? Скажите, очень хочу в этом моменте разобраться раз и навсегда)
- Вопрос задан более трёх лет назад
- 51913 просмотров
Комментировать
Решения вопроса 3
Чебуратор тега РНР
Читая ответы, хочется плакать.
В кои-то веки нашелся автор, который осилил корректно сформулировать свою проблему: в дополнение к стандартной проверке РНР, ему надо отбрасывать и нули тоже. Казалось бы — прочти и сделай по заказанному.
Но нет. Один герой все бубнит про «это исходит от Вашей задачи» (при том что задача описана!) и дальше пишет бессмысленный код. Второй, по своей стародавней привычке, просто с умным видом пишет бессмыслицу. С третьего взятки гладки — типичное похапешное создание, пишет код не приходя в сознание.
И при этом никто (включая автора) почему-то не догадался тупо перечислить условия задачи:
!($var || $var === 0 || $var === 0.0 ||$var === '0')) .
Не говоря уже о том, что подумав, можно сообразить, что автора интересует длина строки. И написать код, который корректно, но не столь императивно следует всем условиям задачи:
function is_empty(&$var)
Самое печальное, что писать это всё — пустая трата времени.
Серая похапешнаая масса так и останется серой массой, не понимающей языка, на котором она пишет, но всегда готовой дать совет ближнему.