PHP는 null이 0이라고 간주합니다.
PHP에서 ($myvariable==0)
$ myvariable이 0이면 표현식의 값은 true입니다. $ myvariable이 null이면이 식의 값도 true입니다. 두 번째 사례를 제외하려면 어떻게해야합니까? $ myvariable이 0 일 때만 표현식이 참이되기를 원합니다. 물론 쓸 수 있어요
($myvariable!=null && $myvariable==0 )
그러나 이것을 수행하는 다른 우아한 방법이 있습니까?
$myvariable === 0
비교 연산자 에 대해 자세히 알아보십시오 .
당신은 깊은 질문을 힌트합니다 : 언제 표현이 사실이어야합니까?
아래에서 수행중인 작업이 작동하지 않는 이유 와 해결 방법 을 설명 합니다.
많은 언어에서 null
, 0
그리고 빈 문자열 ( ""
모두 false로 평가),이 수 if
문은 매우 간결하고 직관적 인, 그러나 null
, 0
그리고 ""
모든 다른 유형의도 있습니다. 어떻게 비교해야합니까?
이 페이지 는 비교되는 두 개의 변수가있는 경우 변수가 다음과 같이 변환됨을 알려줍니다 (첫 번째 일치시 테이블에서 나옴)
Type of First Type of Second Then
null/string string Convert NULL to "", numerical/lexical comparison
bool/null anything Convert to bool, FALSE < TRUE
그래서 당신은 null과 숫자를 비교하고 있습니다. 따라서 널과 숫자는 모두 부울로 변환됩니다. 이 페이지 는 이러한 변환에서 null
와 0
모두 고려 됨을 알려줍니다 FALSE
.
이제 당신의 표현은라고 읽습니다 false==false
. 물론 이것은 사실입니다.
그러나 당신이 원하는 것은 아닙니다.
이 페이지 는 PHP의 비교 연산자 목록을 제공합니다.
Example Name Result
$a == $b Equal TRUE if $a equals $b after type juggling.
$a === $b Identical TRUE if $a equals $b, AND they are of the same type.
$a != $b Not equal TRUE if $a not equals $b after type juggling.
$a <> $b Not equal TRUE if $a not equals $b after type juggling.
$a !== $b Not identical TRUE if $a not equals $b, or they are not of the same type.
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than/equal TRUE if $a is less than or equal to $b.
$a >= $b Greater than/equal TRUE if $a is greater than or equal to $b.
첫 번째 비교기는 현재 사용중인 비교입니다. 앞서 언급 한 변환을 수행합니다.
두 번째 비교기를 사용하면 문제가 해결됩니다. null과 숫자는 같은 유형이 아니기 ===
때문에 ==
연산자 처럼 유형 변환을 수행하는 대신 비교에서 false를 반환 합니다.
도움이 되었기를 바랍니다.
null 또는 0으로 식별하려면 다음을 수행하십시오.
is_int($var)
변수가 숫자 또는 숫자 문자열 인 경우. Zero를 식별하기 위해 사용is_numeric($var)
은 솔루션 또는 사용입니다.$var === 0
is_null($var)
변수가 NULL 인 경우
연산자 와 함께 php 함수 is_null () 함수를 사용하십시오 ===
. !==
예상대로 작동합니다.
($myvariable === 0)
유형 강제를 수행하지 않는 시도하십시오 .
두 번째 솔루션도 작동하지 않습니다. ===
운영자는 문제에 대한 솔루션입니다.
0이 문자열 일 수있는 경우 "0 문자열"도 확인해야합니다.
($myvariable === 0 || $myvariable === '0')
$myvariable===0
$a === $b
$ a가 $ b와 같고 동일한 유형 인 경우 TRUE
거기의 is_null
기능은, 그러나 이것은 단지 대체됩니다$myvariable!=null
나는 내 프로젝트 중 하나에서 비슷한 문제에 직면했지만 ZERO 값을 내 상태에 대한 유효한 값으로 사용하고 있다는 약간의 차이가있었습니다. NULL을 0 및 다른 값과 구분하는 간단한 논리를 사용하여 해결 한 방법은 다음과 같습니다.
if (gettype($company_id) === 'NULL') {
$company = Company::where('id', Auth::user()->company_id)->first();
} else {
$company = Company::where('id', $company_id)->first();
}
내 경우에는이 soulution을 찾았으며 나를 위해 작동합니다.
if ($myvariable == NULL) {
codehere...
}
참조 URL : https://stackoverflow.com/questions/1782759/php-considers-null-is-equal-to-zero
'programing' 카테고리의 다른 글
대상 주체 이름이 올바르지 않습니다. (0) | 2021.01.18 |
---|---|
tensorflow에서 일부 변수 / 범위를 "고정": stop_gradient 대 변수 전달을 최소화 (0) | 2021.01.18 |
동일한 모델에서 여러 연결이있는 Rails Polymorphic Association (0) | 2021.01.18 |
두 개의 IEnumerable을 동시에 반복하는 방법은 무엇입니까? (0) | 2021.01.18 |
Javascript에서 ISO 8601 날짜 구문 분석 (0) | 2021.01.18 |