- PHP is_null
- Introduction to the PHP is_null() construct
- PHP is_null() examples
- PHP is_null() with array
- PHP is_null() with string index
- PHP is_null(), equal opeartor (==), and identity operator (===)
- Comparing falsy values with null using equal operator (==)
- Comparing falsy value with null using identity operator (===)
- Comparing falsy values with null using the PHP is_null()
- Summary
- Операторы сравнения
- Сравнение чисел с плавающей точкой
- Тернарный оператор
PHP is_null
Summary: in this tutorial, you’ll learn how to use the PHP is_null() construct to check if a variable is null .
Introduction to the PHP is_null() construct
PHP is_null() accepts a variable and returns true if that variable is null . Otherwise, it returns false .
is_null(mixed $v): bool
Code language: PHP (php)
In this syntax, the $v is the variable to check. If $v doesn’t exist, the is_null() also returns true and issues a notice.
Since the is_null() is a language construct, not a function, you cannot call it via variable functions. For example, the following statement will result in an error:
$f = is_null;
Code language: PHP (php)
However, you can define a function that wraps the is_null() construct like this:
function isnull($v): bool < return is_null($v); >
Code language: PHP (php)
Alternatively, you can define an arrow function, assign it to a variable, and use that variable function.
$isnull = fn($v) => is_null($v); $color = null; echo $isnull($color); // true
Code language: PHP (php)
PHP is_null() examples
The following example uses the is_null() construct and returns true because the $count variable doesn’t exist:
var_dump(is_null($count));
Code language: PHP (php)
This code also issues a notice:
Notice: Undefined variable: $count
Code language: PHP (php)
The following example uses the is_null() and returns true because the $count variable is null :
$count = null; var_dump(is_null($count)); // true
Code language: PHP (php)
The following example uses the is_null() and returns false because the $count variable is not null :
$count = 1; var_dump(is_null($count)); // false
Code language: PHP (php)
PHP is_null() with array
The following example uses the is_null() to check if the element with the key link is null or not. It returns true because the element doesn’t exist:
$colors = [ 'text' => 'black', 'background' => 'white' ]; var_dump(is_null($colors['link']));
Code language: PHP (php)
Notice: Undefined index: link
Code language: PHP (php)
PHP is_null() with string index
The following example uses the is_null() to check if the element at index 5 in the string $message is null or not:
$message = 'Hello'; var_dump(is_null($message[5]));
Code language: PHP (php)
It returns false and issues a notice:
PHP Notice: Uninitialized string offset: 5
Code language: PHP (php)
PHP is_null(), equal opeartor (==), and identity operator (===)
The echo displays an empty string for the false value, which is not intuitive. The following defines a function that displays false as the string false instead of an empty string:
function echo_bool(string $title, bool $v): void < echo $title, "\t", $v === true ? 'true' : 'false', PHP_EOL; >
Code language: PHP (php)
Comparing falsy values with null using equal operator (==)
Comparing a falsy value with null using the equal operator ( == ) will return true . For example:
The following example compares null with falsy values using the equal operator ( == ):
function echo_bool(string $title, bool $v): void < echo $title, "\t", $v === true ? 'true' : 'false', PHP_EOL; > echo_bool('null == false:', null == false); echo_bool('null == 0:', null == 0); echo_bool('null == 0.0:', null == 0.0); echo_bool('null =="0":', null == false); echo_bool('null == "":', null == ''); echo_bool('null == []:', null == []); echo_bool('null == null:', null == null);
Code language: PHP (php)
null == false: true null == 0: true null == 0.0: true null =="0": true null == "": true null == []: true null == null: true
Code language: plaintext (plaintext)
Comparing falsy value with null using identity operator (===)
The following example uses the identity operator (=== ) to compare null with falsy values, only null === null returns true .
echo_bool('null === false:', null === false); echo_bool('null === 0:', null === 0); echo_bool('null === 0.0:', null === 0.0); echo_bool('null ==="0":', null === false); echo_bool('null === "":', null === ''); echo_bool('null === []:', null === []); echo_bool('null === null:', null === null);
Code language: plaintext (plaintext)
null === false: false null === 0: false null === 0.0: false null ==="0": false null === "": false null === []: false null === null: true
Code language: PHP (php)
Comparing falsy values with null using the PHP is_null()
The following example uses the is_null() to check if falsy values are null :
function echo_bool(string $title, bool $v): void < echo $title, "\t", $v === true ? 'true' : 'false', PHP_EOL; > echo_bool('is_null(false):', is_null(false)); echo_bool('is_null(0):', is_null(0)); echo_bool('is_null(0.0)', is_null(0.0)); echo_bool('is_null("0"):', is_null("0")); echo_bool('is_null(""):', is_null("")); echo_bool('is_null([]):', is_null([])); echo_bool('is_null(null):', is_null(null));
Code language: PHP (php)
is_null(false): false is_null(0): false is_null(0.0) false is_null("0"): false is_null(""): false is_null([]): false is_null(null): true
Code language: PHP (php)
The is_null() and identity operator ( === ) return the same result.
Summary
- The is_null() checks a value and returns true if that value is null . Otherwise, it returns false .
- The is_null() behaves the same as the identity operator ( === ).
Операторы сравнения
Операторы сравнения, как это видно из их названия, позволяют сравнивать между собой два значения. Возможно вам будет интересно также ознакомиться с разделом Сравнение типов, в котором приведено большое количество соответствующих примеров.
Пример | Название | Результат |
---|---|---|
$a == $b | Равно | TRUE если $a равно $b после преобразования типов. |
$a === $b | Тождественно равно | TRUE если $a равно $b и имеет тот же тип. |
$a != $b | Не равно | TRUE если $a не равно $b после преобразования типов. |
$a <> $b | Не равно | TRUE если $a не равно $b после преобразования типов. |
$a !== $b | Тождественно не равно | TRUE если $a не равно $b или они разных типов. |
$a < $b | Меньше | TRUE если $a строго меньше $b . |
$a > $b | Больше | TRUE если $a строго больше $b . |
$a | Меньше или равно | TRUE если $a меньше или равно $b . |
$a >= $b | Больше или равно | TRUE если $a больше или равно $b . |
В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.
var_dump ( 0 == «a» ); // 0 == 0 -> true
var_dump ( «1» == «01» ); // 1 == 1 -> true
var_dump ( «10» == «1e1» ); // 10 == 10 -> true
var_dump ( 100 == «1e2» ); // 100 == 100 -> true
?php
switch ( «a» ) case 0 :
echo «0» ;
break;
case «a» : // Эта ветка никогда не будет достигнута, так как «a» уже сопоставленно с 0
echo «a» ;
break;
>
?>
Для различных типов сравнение происходит в соответствии со следующей таблицей (по порядку).
Тип операнда 1 | Тип операнда 2 | Результат |
---|---|---|
null или string | string | NULL преобразуется в «», числовое или лексическое сравнение |
bool или null | что угодно | Оба операнда преобразуются в bool , FALSE < TRUE |
object | object | Встроенные классы могут определять свои собственные правила сравнения, объекты разных классов не сравниваются, объекты одного класса — сравниваются свойства тем же способом, что и в массивах (PHP 4), в PHP 5 есть свое собственное объяснение |
string , resource или number | string , resource или number | Строки и ресурсы переводятся в числа, обычная математика |
array | array | Массивы с меньшим числом элементов считаются меньше, если ключ из первого операнда не найден во втором операнде — массивы не могут сравниваться, иначе идет сравнение соответствующих значений (смотри пример ниже) |
object | что угодно | object всегда больше |
array | что угодно | array всегда больше |
Пример #1 Сравнение булево/null
// Булево и null всегда сравниваются как булево значение
var_dump ( 1 == TRUE ); // TRUE — тоже что и (bool)1 == TRUE
var_dump ( 0 == FALSE ); // TRUE — тоже что и (bool)0 == FALSE
var_dump ( 100 < TRUE ); // FALSE - тоже что и (bool)100 < TRUE
var_dump (- 10 < FALSE ); // FALSE - тоже что и (bool)-10 < FALSE
var_dump ( min (- 100 , — 10 , NULL , 10 , 100 )); // NULL — (bool)NULL < (bool)-100 , тоже что и FALSE < TRUE
?>?php
Пример #2 Алгоритм сравнения обычных массивов
// Так сравниваются массивы при сравнении стандартными операторами
function standard_array_compare ( $op1 , $op2 )
if ( count ( $op1 ) < count ( $op2 )) return - 1 ; // $op1 < $op2
> elseif ( count ( $op1 ) > count ( $op2 )) return 1 ; // $op1 > $op2
>
foreach ( $op1 as $key => $val ) if (! array_key_exists ( $key , $op2 )) return null ; // не могут быть сравнимы
> elseif ( $val < $op2 [ $key ]) return - 1 ;
> elseif ( $val > $op2 [ $key ]) return 1 ;
>
>
return 0 ; // $op1 == $op2
>
?>?php
Сравнение чисел с плавающей точкой
Из-за особого внутреннего представления float , не нужно проверять на равенство два float -числа.
Для более подробной информации смотрите документацию по типу float .
Тернарный оператор
Еще одним условным оператором является тернарный оператор «?:».
Пример #3 Присваивание значения по умолчанию
// Пример использования тернарного оператора
$action = (empty( $_POST [ ‘action’ ])) ? ‘default’ : $_POST [ ‘action’ ];
?php
// Приведенный выше код аналогичен следующему блоку с использованием if/else
if (empty( $_POST [ ‘action’ ])) $action = ‘default’ ;
> else $action = $_POST [ ‘action’ ];
>
Выражение (expr1) ? (expr2) : (expr3) интерпретируется как expr2 , если expr1 имеет значение TRUE , или как expr3 если expr1 имеет значение FALSE .
Начиная с версии PHP 5.3 также стало возможным не писать среднюю часть тернарного оператора. Выражение expr1 ?: expr3 возвращает expr1 если expr1 имеет значение TRUE , и expr3 в другом случае.
Замечание: Пожалуйста учтите, что тернарный оператор является выражением и трактуется не как переменная, а как результат выражения. Это важно знать, если вы хотите вернуть переменную по ссылке. Выражение return $var == 42 ? $a : $b; не будет работать в функции, возвращающей значение по ссылке, а в более поздних версиях PHP также будет выдано предупреждение.
Замечание:
Рекомендуется избегать «нагромождения» тернарных выражений. Поведение PHP неочевидно при использовании нескольких тернарных операторов в одном выражении:
Пример #4 Неочевидное поведение тернарного оператора
// на первый взгляд, следующий код должен вывести ‘true’
echo ( true ? ‘true’ : false ? ‘t’ : ‘f’ );
?php
// однако, он выводит ‘t’
// это происходит потому, что тернарные выражения вычисляются слева направо
// это намного более очевидная версия вышеприведенного кода
echo (( true ? ‘true’ : false ) ? ‘t’ : ‘f’ );
// здесь вы можете видеть, что первое выражение вычисляется в ‘true’, которое
// в свою очередь вычисляется в (bool)true, таким образом возвращая истинную ветвь
// второго тернарного выражения.
?>