programing tip

PHP에서 is_null ($ x) vs $ x === null

itbloger 2020. 7. 2. 08:01
반응형

PHP에서 is_null ($ x) vs $ x === null


가능한 중복 :
is_null ($ var)과 ($ var === null)의 차이점은 무엇입니까?

PHP는 (내가 알고있는 것을, 3 당신이 계산하는 경우 두 가지가 isset()값이 null의 경우 결정하는) 방법 : is_null()=== null. 나는 그것이 === null더 빠르다 는 것을 들었지만 확인 하지는 못했지만 코드 검토에서 누군가 is_null()가 널 평가 목적으로 특별히 설계되었으므로 대신 사용할 것을 강력히 제안했습니다 . 또한 수학이나 무언가에 대해 이야기하기 시작했습니다.

어쨌든, is_null()분명히 느리다는 사실 은 그것이 그것이하는 것보다 더 많은 일을 === null하고 있으며 아마도 바람직 하다고 믿게합니다 . 둘 중 하나를 사용해야 할 이유가 있습니까? 항상 선호합니까? 무엇에 대해 isset()?

대한 추가 사항은 아마도이 질문에 폐쇄되지로서, 무엇에 대한 isset()is_null()? 모든 isset()것은 통지를 억제하는 것 같습니다 . 정의되지 않은 변수에 대한 통지를 실제로 원하지 않는 한 is_null()대신 사용해야하는 이유는 무엇입니까? 당시에 변수가 초기화되었다는 것을 알면 어떻습니까?

마지막으로, 선호하는 어떤 수학적 이유가 is_null()이상은 === null? null과 비교할 수없는 것이 있습니까?


없다 어떤 절대적으로 간 기능의 차이 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()때때로 반환 될 수 있습니다 . 이는 오버로드 된 객체에서 사용되는 경우입니다. 즉, 객체 가 오프셋이있는 경우에도 반환 하는 / 메소드를 정의하는 경우 (사람이 사용하기 때문에 실제로는 매우 일반적 임) 에서 / ).truenulloffsetExists__issettruenullarray_key_existsoffsetExists__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합니다.


I'm not able to say wether it's better to use is_null or === null. But be aware when using isset on arrays.

$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

=== and is_null is the same.

According to this comment is_null is only 250ns slower. I think because a function is slower than an operator.


The PHP documentation has a good discussion and experiments on is_null, === null, isset. Especially read the comment section.

참고URL : https://stackoverflow.com/questions/8228837/is-nullx-vs-x-null-in-php

반응형