Какая разница между is_null ($ var) и ($ var === null)?
Есть ли разница между этим...
if (is_null($var)) {
do_something();
}
и это?
if ($var === null) {
do_something();
}
Какая форма лучше при проверке наличия или отсутствия переменной? Есть ли какие-либо проблемы с краями, о которых я должен знать? (Я инициализирую все мои переменные, поэтому несуществующие переменные не являются проблемой.)
Ответы
Ответ 1
Если инициализирована переменная (которую вы указали, хотя я не уверен на 100%, если это имеет значение в этом контексте или нет. Оба решения могут вызывать предупреждение, если переменная не была определена), они функционально одна и та же. Я предполагаю, что ===
будет немного быстрее, хотя, поскольку он удаляет накладные расходы на вызов функции.
Это зависит от того, как вы смотрите на свое состояние.
===
предназначен для строгого сравнения данных. NULL имеет только одно "значение", поэтому это работает для сравнения с NULL (который является константой PHP нулевого значения)
is_null
проверяет, что переменная имеет тип данных NULL.
Это для вас, что вы выбираете, действительно.
Ответ 2
✅
true
❌
false
| isset | is_null | ===null | ==null | empty |
|-------|---------|---------|---------|---------|---------|
| null | ❌ | ✅ | ✅ | ✅ | ✅ |
| true | ✅ | ❌ | ❌ | ❌ | ❌ |
| false | ✅ | ❌ | ❌ | ✅ | ✅ |
| 0 | ✅ | ❌ | ❌ | ✅ | ✅ |
| 1 | ✅ | ❌ | ❌ | ❌ | ❌ |
| \0 | ✅ | ❌ | ❌ | ❌ | ❌ |
| unset | ❌ | ✅ | ✅ | ✅ | ✅ |
| "" | ✅ | ❌ | ❌ | ✅ | ✅ |
Резюме: 🔸 ♦ ️🔸
-
empty
эквивалентен ==null
-
is_null
эквивалентен ===null
-
isset
обращается к is_null
и ===null
Ответ 3
Оба они точно такие же, я использую is_null
, потому что он делает мой код более удобочитаемым
Ответ 4
Если для php кажется избыточным иметь так много функций типа is_foo(), когда вы можете просто использовать стандартные операторы сравнения, рассмотрите программно называемые функции.
$arrayOfNullValues = array_filter($myArray, 'is_null');
Ответ 5
Я только что запустил быстрый тест, проверив миллион итераций каждого из них. is_null
потребовалось 8 секунд; === null
занял 1.
Таким образом, вызов is_null
на 0.000007 секунд медленнее, чем вызов ===
на моем компьютере.
Я бы нашел что-то более полезное для оптимизации.
Мой код:
<?php
$start = time();
$var = null;
for ($i = 1000000; $i--; ) {
is_null($var);
}
echo time() - $start;
$start = time();
for ($i = 1000000; $i--; ) {
$var === null;
}
echo time() - $start;
Ответ 6
Я бы каждый раз использовал встроенную функцию PHP по сравнению с оператором.
Ответ 7
is_null($var)
примерно в 14 раз медленнее, чем $var===null
... 37,8 мс против 2,6 мс.
Но на самом деле я не знаю почему.
Ответ 8
В этом обсуждении люди часто забывают упомянуть, что если вы все о строгой проверке типов, is_null
поможет вам никогда не делать опечатки в ваших операторах сравнения (== vs ===).