PHP는 null을 0과 동일하게 간주합니다.
PHP에서,($myvariable==0)
$myvariable이 0이면 식의 값이 참이고, $myvariable이 null이면 이 식의 값도 참입니다.두 번째 경우를 어떻게 제외할 수 있습니까?$myvariable이 0일 때만 true로 표현했으면 합니다.물론 쓸 수 있습니다.
($myvariable != null && $myvariable == 0)
하지만 이것을 할 수 있는 다른 우아한 방법이 있을까요?
$myvariable === 0
당신은 깊은 질문을 암시합니다: 언제 표현이 진실이어야 하는가?
아래에서 당신이 하는 일이 왜 작동하지 않는지, 어떻게 해결해야 하는지 설명하겠습니다.
여러 언어로null
,0
그리고 빈 문자열(""
) 모두 거짓으로 평가합니다. 이것은 다음을 만들 수 있습니다.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과 숫자가 동일한 유형이 아니므로,===
비교는 형식 변환을 수행하는 대신 거짓을 반환합니다.==
연산자가 할 것입니다.
이게 도움이 되길 바랍니다.
null 또는 0으로 식별하는 방법:
is_int($var)
변수가 숫자 또는 숫자 문자열인 경우.0을 식별하려면 다음을 사용합니다.is_numeric($var)
또한 솔루션 또는 용도$var === 0
is_null($var)
변수가 NULL인 경우
해라($myvariable === 0)
유형 강제를 수행하지 않을 것입니다.
php 함수 is_null( ) 함수를 사용합니다.===
교환입니다.!==
또한 당신이 기대하는 방식으로 작동합니다.
두 번째 해결책도 효과가 없을 것입니다.연산자가 문제의 해결책입니다.
0이 문자열일 수 있는 경우 "0 문자열"을 선택하는 것도 고려해야 합니다.
($myvariable === 0 || $myvariable === '0')
저는 제 프로젝트 중 하나에서 비슷한 문제에 직면한 적이 있었는데, 제 상태에 대한 유효한 값으로 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();
}
$myvariable===0
$a === $b
$a가 $b와 같고 유형이 같은 경우 동일한 TRUE
기능이 있지만, 이것은 단지 당신의 것을 대신할 것입니다.$myvariable!=null
나의 경우, 나는 이 해결책을 찾았고 그것은 나에게 효과가 있습니다.
if ($myvariable === NULL) {
codehere...
}
언급URL : https://stackoverflow.com/questions/1782759/php-considers-null-is-equal-to-zero
'programing' 카테고리의 다른 글
node.js에 있는 문자열의 sha1 해시를 어떻게 얻을 수 있습니까? (0) | 2023.08.14 |
---|---|
GATER_PLAN_STATISTICS가 기본 계획 통계를 생성하지 않습니다. (0) | 2023.08.14 |
각도가 있는 로케일 "XXX"에 대한 로케일 데이터가 누락됨 (0) | 2023.08.09 |
PHP 표준 입력? (0) | 2023.08.09 |
Windows에서 github/git Checkout이 '오류: 잘못된 경로'를 반환합니다. (0) | 2023.08.09 |