programing

PHP는 null이 0이라고 간주합니다.

goodcopy 2021. 1. 18. 22:06
반응형

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과 숫자를 비교하고 있습니다. 따라서 널과 숫자는 모두 부울로 변환됩니다. 이 페이지 는 이러한 변환에서 null0모두 고려 됨을 알려줍니다 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

반응형