이것 사이에 차이점이 있습니까?
if (is_null($var)) {
do_something();
}
이?
if ($var === null) {
do_something();
}
변수에 null이 있는지 여부를 확인할 때 어떤 형식이 더 낫습니까? 내가 알아야 할 엣지 케이스가 있습니까? (모든 변수를 초기화하므로 존재하지 않는 변수는 문제가되지 않습니다.)
답변:
변수가 초기화 된 경우 (이 상황에서 이것이 중요한지 100 % 확실하지는 않지만, 변수가 정의되지 않은 경우 두 솔루션 모두 경고를 표시 할 수 있음), 기능적으로 동일합니다. 나는 추정 ===빨리 함수 호출의 오버 헤드를 제거로 비록 소폭 될 것이다.
그것은 당신이 당신의 상태를 어떻게 보는지에 달려 있습니다.
===엄격한 데이터 비교를위한 것입니다. NULL에는 '값'이 하나만 있으므로 NULL (널 '값'의 PHP 상수)과 비교하는 데 사용할 수 있습니다.
is_null 변수가 NULL 데이터 유형인지 확인합니다.
당신이 선택하는 것은 당신에게 달려 있습니다.
is_null실수로 사용하기 쉽기 때문에 변형을 선호합니다 . 는 (다른 답변 참조) 과 동일 하기 때문에 간단하고 읽기 쉬운 . == null=== null== nullemptyis_null
✅ 이다 true
❌ 이다 false
| isset | is_null | ===null | ==null | empty |
|-------|---------|---------|---------|---------|---------|
| null | ❌ | ✅ | ✅ | ✅ | ✅ |
| true | ✅ | ❌ | ❌ | ❌ | ❌ |
| false | ✅ | ❌ | ❌ | ✅ | ✅ |
| 0 | ✅ | ❌ | ❌ | ✅ | ✅ |
| 1 | ✅ | ❌ | ❌ | ❌ | ❌ |
| \0 | ✅ | ❌ | ❌ | ❌ | ❌ |
| unset | ❌ | ✅ | ✅ | ✅ | ✅ |
| "" | ✅ | ❌ | ❌ | ✅ | ✅ |
empty 다음과 같다 ==nullis_null 다음과 같다 ===nullisset의 역수 is_null및===null$v일부 일반 변수를 나타 내기 위해 이름이 지정된 첫 번째 열과 기타 isset($v), is_null($v)등 을 갖는 것이 테이블을 약간 더 명확하게 만들 수 있습니다 $v===null.
isset정의되지 않은 변수에 대해 불평하지 않고 false를 반환합니다. 사용 is_null또는 === null통지가 발생합니다.
둘 다 똑같 is_null습니다. 코드를 더 읽기 쉽게 만들기 때문에 사용 합니다.
is_null실제로 덜 명확 하다고 느낍니다 . 잘 읽을 수 있지만 $v === null비교가 엄격한 의미론으로 수행된다는 것은 의심의 여지가 없지만을 사용 is_null($v)하면 일부 코더는 그것이 사용 ===하는지 또는 ==의미론 인지 궁금해 할 것 입니다.
php가 is_foo () 유형의 함수를 너무 많이 갖는 것이 중복 된 것 같으면 표준 비교 연산자를 사용할 수있을 때 프로그래밍 방식으로 호출되는 함수를 고려하십시오.
$arrayOfNullValues = array_filter($myArray, 'is_null');
$arrayWithoutNullValues가지고 배열 저장할 것이다 만 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;
is_null()7.1.9 Win32에서 내 컴퓨터에서 약간 더 빠릅니다.
사람들이이 토론에서 자주 언급하는 것을 잊는 한 가지는 엄격한 유형 검사에 관한 모든 is_null것이 비교 연산자 (== vs ===)에 오타를 만들지 않도록 도와 준다는 것입니다.
===명시적인 기능이 아니기 때문에 연산자가 더 빠를 것이라고 생각할 것입니다 ...하지만 한두 번 놀랐습니다.