[php] is_null ($ var)과 ($ var === null)의 차이점은 무엇입니까?

이것 사이에 차이점이 있습니까?

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

이?

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

변수에 null이 있는지 여부를 확인할 때 어떤 형식이 더 낫습니까? 내가 알아야 할 엣지 케이스가 있습니까? (모든 변수를 초기화하므로 존재하지 않는 변수는 문제가되지 않습니다.)



답변

변수가 초기화 된 경우 (이 상황에서 이것이 중요한지 100 % 확실하지는 않지만, 변수가 정의되지 않은 경우 두 솔루션 모두 경고를 표시 할 수 있음), 기능적으로 동일합니다. 나는 추정 ===빨리 함수 호출의 오버 헤드를 제거로 비록 소폭 될 것이다.

그것은 당신이 당신의 상태를 어떻게 보는지에 달려 있습니다.

===엄격한 데이터 비교를위한 것입니다. NULL에는 ‘값’이 하나만 있으므로 NULL (널 ‘값’의 PHP 상수)과 비교하는 데 사용할 수 있습니다.

is_null 변수가 NULL 데이터 유형인지 확인합니다.

당신이 선택하는 것은 당신에게 달려 있습니다.


답변

이다 true

이다 false

        | isset   | is_null | ===null | ==null  | empty   |
|-------|---------|---------|---------|---------|---------|
|  null |    ❌   |    ✅   |    ✅   |    ✅  |    ✅   |
|  true |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
| false |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
|     0 |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
|     1 |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
|    \0 |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
| unset |    ❌   |    ✅   |    ✅   |    ✅  |    ✅   |
|   ""  |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |

요약 : 🔸 ♦ ️🔸

  • empty 다음과 같다 ==null
  • is_null 다음과 같다 ===null
  • isset의 역수 is_null===null


답변

둘 다 똑같 is_null습니다. 코드를 더 읽기 쉽게 만들기 때문에 사용 합니다.


답변

php가 is_foo () 유형의 함수를 너무 많이 갖는 것이 중복 된 것 같으면 표준 비교 연산자를 사용할 수있을 때 프로그래밍 방식으로 호출되는 함수를 고려하십시오.

$arrayOfNullValues = array_filter($myArray, 'is_null');


답변

저는 각각 백만 번의 반복을 테스트하면서 빠른 벤치 마크를 실행했습니다. is_null완료하는 데 8 초가 걸렸습니다. === null1을 가져 갔다.

따라서 호출 is_null===내 컴퓨터 에서 호출하는 것보다 0.000007 초 더 느립니다 .

최적화하기에 더 유용한 것을 찾을 것입니다.


내 코드 :

<?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)$var===null… 37.8ms 대 2.6ms 보다 약 14 배 느립니다 .

그러나 실제로 나는 이유를 모릅니다.