programing

PHP는 null을 0과 동일하게 간주합니다.

abcjava 2023. 8. 14. 22:23
반응형

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

반응형