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 не сопоставим?
7 ответов:
здесь абсолютно нет разница в функциональности между
is_nullи=== null.разница только в том, что
is_null- Это функция, и таким образом
- немного медленнее (накладные расходы на вызов функции)
- может использоваться в качестве обратного вызова, например,
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