is null ($x) vs $x = = = null в PHP [дубликат]




Возможные Дубликаты:
в чем разница между is_null($var) и ($var === null)?






PHP имеет два (что я знаю, и три, если считать isset()) методы для определения, является ли значение null: is_null() и === null. Я слышал, но не подтвердил, что === null быстрее, но в обзоре кода кто-то настоятельно предложил мне использовать is_null() вместо того, как он специально разработан для цель нулевой оценки. Он также начал говорить о математике или что-то.



во всяком случае, тот факт, что is_null() по-видимому, медленнее также приводит меня к мысли, что он делает больше, чем === null делает и, вероятно, предпочтительнее. Есть ли какая-то причина использовать один или другой? Это всегда предпочтительнее? А как же isset()?



в качестве дополнения, возможно, не получить этот вопрос закрыт, как насчет isset() и is_null()? Кажется, что все isset() будет делать это подавить заметьте, так что если вы на самом деле хочу уведомление для неопределенной переменной, любая причина использовать is_null() вместо? Как насчет того, если вы знаете, что переменная инициализируется в то время?



наконец, есть ли математическая причина предпочесть is_null() over === null? Что-то о том, что null не сопоставим?

551   7  

7 ответов:

здесь абсолютно нет разница в функциональности между is_null и === null.

разница только в том, что is_null - Это функция, и таким образом

  1. немного медленнее (накладные расходы на вызов функции)
  2. может использоваться в качестве обратного вызова, например,array_map('is_null', $array).

лично я использую null === всякий раз, когда я могу, как это более соответствует false === и true === проверка.

если вы хотите, вы можете проверить код: is_identical_function (===) и php_is_type (is_null) сделать то же самое для IS_NULL случае.


соответствующей isset() языковая конструкция проверяет, существует ли переменная на самом деле, прежде чем делать null проверка. Так что isset($undefinedVar) не бросят уведомление.

также обратите внимание, что isset() иногда может возвратить true даже если это значение null - это тот случай, когда он используется на перегруженный объект, т. е. если объект определяет offsetExists/__isset метод, который возвращает true даже если смещение null (это на самом деле довольно распространены, потому что люди используют array_key_exists на offsetExists/__isset).

как заявили другие, существует разница во времени между использованием === и is_null(). Сделал некоторые быстрые тесты и получил следующие результаты:

<?php

//checking with ===
$a = array();
$time = microtime(true);
for($i=0;$i<10000;$i++) {
    if($a[$i] === null) {
         //do nothing
    }
}
echo 'Testing with === ', microtime(true) - $time, "\n";

//checking with is_null()
$time = microtime(true);
for($i=0;$i<10000;$i++) {
    if(is_null($a[$i])) {
         //do nothing
    }
}
echo 'Testing with is_null() ', microtime(true) - $time;
?>

дает результаты

тестирование с = = = 0.0090668201446533

тестирование с is_null () 0.013684034347534

посмотреть код в действии

все они имеют свои места, хотя только isset() будет избегать неопределенных переменных предупреждений:

$ php -a
Interactive shell

php > var_dump(is_null($a));
PHP Notice:  Undefined variable: a in php shell code on line 1
bool(true)
php > var_dump($a === null);
PHP Notice:  Undefined variable: a in php shell code on line 1
bool(true)
php > var_dump(isset($a));
bool(false)
php >

вам нужно isset() Если переменная не определена. Она возвращает false, если переменная не определена или === null (да, это это некрасиво). Только isset() и empty() не вызывайте E_NOTICE, если переменная или элемент массива не существует.

на самом деле нет разницы между is_null и === null. Я думаю === гораздо приятнее, но когда вам, например, нужно использовать call_user_func по какой-то сомнительной причине вам придется использовать is_null.

=== и is_null то же самое.

По данным комментарийis_null только 250ns медленнее. Я думаю, потому что функция медленнее, чем оператор.

Я не могу сказать, что лучше использовать is_null или === null. Но имейте в виду при использовании isset на массивах.

$a = array('foo' => null);

var_dump(isset($a['foo'])); // false
var_dump(is_null($a['foo'])); // true
var_dump(array_key_exists('foo', $a)); // true

на PHP документации имеет хорошее обсуждение и эксперименты на is_null, === null, isset. Особенно в разделе Комментарии.

Comments

    Ничего не найдено.