В чем разница между is null($var) и ($var === null)?


есть ли разница между этим...

if (is_null($var)) {
    do_something();
}

и этого?

if ($var === null) {
    do_something();
}

какая форма лучше при проверке, содержит ли переменная null? Есть ли какие-либо крайние случаи, о которых я должен знать? (Я инициализирую все свои переменные, поэтому несуществующие переменные не являются проблемой.)

7 72
php

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

оба точно такие же, я использую is_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;

Я хотел бы использовать встроенные функции PHP по сравнению с оператором в любое время.

is_null($var) примерно в 14 раз медленнее, чем $var===null... 37.8 мс против 2,6 МС.

но на самом деле я не знаю, почему.