В чем разница между is null($var) и ($var === null)?
есть ли разница между этим...
if (is_null($var)) {
do_something();
}
и этого?
if ($var === null) {
do_something();
}
какая форма лучше при проверке, содержит ли переменная null? Есть ли какие-либо крайние случаи, о которых я должен знать? (Я инициализирую все свои переменные, поэтому несуществующие переменные не являются проблемой.)
7 ответов:
при условии, что переменная инициализирована (что вы указали - хотя я не уверен на 100%, имеет ли это значение в этом контексте или нет. Оба решения могут выдать предупреждение, если переменная не была определена), они функционально одинаковы. Я полагаю
===
было бы немного быстрее, хотя, как это удаляет накладные расходы вызова функции.Это действительно зависит от того, как вы посмотрите на ваше состояние.
===
для строгого сравнения данных. NULL имеет только одно "значение", поэтому это работает для сравнения с NULL (который является константой PHP нулевого 'значения')
is_null
проверяет, что переменная имеет тип данных null.Это зависит от вас, что вы выбираете, на самом деле.
is
true
is
false
| isset | is_null | ===null | ==null | empty | |-------|---------|---------|---------|---------|---------| | null | | | | | | | true | | | | | | | false | | | | | | | 0 | | | | | | | 1 | | | | | | | | | | | | | | unset | | | | | | | "" | | | | | |
резюме:♦️
empty
эквивалентно==null
is_null
эквивалентно===null
isset
обратно вis_null
и===null
Если для php кажется избыточным иметь так много функций типа is_foo (), когда вы можете просто использовать стандартные операторы сравнения, рассмотрите программно вызываемые функции.
$arrayOfNullValues = array_filter($myArray, 'is_null');
Я только что запустил быстрый тест, проверяя миллион итераций каждого. 8 секунд;
=== null
взял 1.так что звоните
is_null
это 0.000007 s медленнее, чем вызов===
на моем компьютере.Я бы нашел что-то более полезное для оптимизации.
мой код:
<?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;