PHP에서 Null vs. False vs. 0


146

나는 좋은 개발자 / 자리 사이의 차이를 활용할 수 있다는 이야기입니다 NullFalse0다른 모든 좋은 "아무것도"엔티티. PHP의 차이점
무엇입니까 ? 그것과 관련이 있습니까?===


실제로 무엇이 사용되는지 실제로 알아내는 것은 거의 불가능합니다. 나는 당신이 사용할 때 일관성을하는 것이 중요 추측 nullfalse. 내가 사용하여 선호 null하는 방법에서 값을 검색 할 때 내가 사용할 수 있기 때문에, isset값을 사용하는 대신 반환 여부를 결정하기 empty: 계정에 걸리지 않을 것이다 false, 0, '0'또는 빈 문자열이 많은 상황에서 가능한 값이 될 수있다. 나에게 그것은 지저분한 구조의 가장 깨끗한 솔루션입니다.
JMRC

답변:


221

언어에 따라 다르지만 PHP에서는 다음과 같습니다.

Null" 아무것도 "를 의미합니다 . var이 초기화되지 않았습니다.

False" 부울 컨텍스트에서 참이 아님 "을 의미 합니다 . 논리적 문제를 다루고 있음을 명시 적으로 보여주는 데 사용됩니다.

0입니다 int. 위의 나머지 부분과는 아무런 관련이 없으며 수학에 사용됩니다.

이제 까다로운 점은 PHP와 같은 동적 언어에서 모두 부울 컨텍스트 (PHP) 의 값을 갖는 것 입니다 False.

==테스트하면 부울 값을 테스트하므로 평등을 얻습니다. 로 ===테스트하면 유형이 테스트되고 불평등이 발생합니다.

그렇다면 왜 유용합니까?

글쎄, strrpos()기능을 보라 . 아무것도 찾지 못하면 False를 반환하지만 문자열의 시작 부분에서 무언가를 발견하면 0을 반환합니다!

<?php
// pitfall :
if (strrpos("Hello World", "Hello")) { 
    // never exectuted
}

// smart move :
if (strrpos("Hello World", "Hello") !== False) {
    // that works !
}
?>

그리고 물론, 당신이 상태를 다루는 경우 :

당신은 차이 확인하려면 DebugMode = False(OFF로 설정), DebugMode = True(ON으로 설정) 및 DebugMode = Null(;-) 하드 디버깅으로 이어질 것입니다 전혀 설정되지 않음).


39
널 (Null)에 대한 참고 사항 : PHP는이를 "값 없음"으로 사용하지만 이는 좋은 습관이 아닙니다. 일반적으로 Null은 "값 없음"또는 "초기화되지 않은 변수"와 다른 "알 수없는 값"을 의미합니다. 1에 1을 더한 값은 1이 아니며 알 수없는 값에 1을 더한 값은 알 수 없습니다. "알 수없는 값"에 대한 작업은 알 수없는 값을 초래하기 때문에 null에 적용된 모든 연산자는 null이되어야합니다.
Eli

7
이것이 모든 의도 임을 명심하십시오 . 실제로 일어나는 일과는 아무런 관련이 없습니다. 실제로 함수는 존재하지 않는 값 (예 : strpos, input_filter)에 대해 false를, 실패에 대해 null (예 : input_filter)을 반환 할 수 있습니다. 따라서 특정 함수 설명서를 읽은 후 === false 및 / 또는 === null을 사용하십시오.
gcb

5
@Eli : Null은 일반적으로 "알 수없는 가치"를 의미한다는 생각을 어디서 얻습니까? 나는 이것이 사실 인 컴퓨터 언어를 생각할 수 없으며, 적어도 내가 찾거나 들었을 수있는 정의에 따르지 않는 영어로도 의미하지 않습니다. 내가 모르는 것을 알고 있습니까?
iconoclast

2
@iconoclast-데이터베이스 세계에서 가져 왔습니다. 내가 이해하는 것처럼 null은 데이터베이스에 존재하지 않거나 알 수없는 데이터 값의 자리 표시 자로 사용됩니다. dev.mysql.com/doc/refman/5.0/en/working-with-null.html 또는 en.wikipedia.org/wiki/Null_%28SQL%29를 참조하십시오 .
Eli

2
엘리는 틀리지 않습니다. 그는 의미 론적으로 null을 사용할 때 다른 프로그래머에게 그 안에 무엇이 있는지 모른다는 신호를 보냅니다. 정의되지 않았습니다. 0을 사용하면 숫자가 무엇인지 알 수 있습니다. 그리고 여기 숫자는 사물의 부재를 나타냅니다. PHP가 값을 위협하는 방식에 관계없이 값은 의미를 가지며 값은 문서의 한 형태입니다.
e-satis

45

null입니다 null. false입니다 false. 슬프지만 사실이야.

PHP에는 일관성이별로 없습니다. 개발자는 TRY 널 수단 "알 수없는"또는 "존재"를 확인합니다. 그러나 종종 False는 '존재하지 않는'역할을합니다 (예 : strrpos ( 'fail', 'search')는 null이 아닌 false를 반환 함)

그들은 이미 무언가에 대해 거짓을 사용하고있을 때 종종 null이 사용되는 것을 볼 수 있습니다. 예 : filter_input (). 변수가 필터에 실패하면 false를 리턴합니다. 변수가 존재하지 않으면 null (존재하지 않음은 필터도 실패했음을 의미하므로 왜 null을 반환합니까?!?)

PHP는 함수에서 데이터를 반환하는 편리함이 있습니다. 종종 개발자들은 데이터 대신 모든 종류의 실패 상태에 빠지게됩니다.

그리고 PHP에서 실패 (false, null)에서 데이터 (int, str 등)를 감지하는 확실한 방법은 없습니다.

함수에 따라 항상 === null 또는 === false를 테스트해야합니다. 또는 filter_input () / filter_var ()와 같은 경우

그리고 저글링 타입의 재미가 있습니다. 배열과 객체도 포함하지 않습니다.

var_dump( 0<0 );        #bool(false)
var_dump( 1<0 );        #bool(false)
var_dump( -1<0 );       #bool(true)
var_dump( false<0 );    #bool(false)
var_dump( null<0 );     #bool(false)
var_dump( ''<0 );       #bool(false)
var_dump( 'a'<0 );      #bool(false)
echo "\n";
var_dump( !0 );        #bool(true)
var_dump( !1 );        #bool(false)
var_dump( !-1 );       #bool(false)
var_dump( !false );    #bool(true)
var_dump( !null );     #bool(true)
var_dump( !'' );       #bool(true)
var_dump( !'a' );      #bool(false)
echo "\n";
var_dump( false == 0 );        #bool(true)
var_dump( false == 1 );        #bool(false)
var_dump( false == -1 );       #bool(false)
var_dump( false == false );    #bool(true)
var_dump( false == null );     #bool(true)
var_dump( false == '' );       #bool(true)
var_dump( false == 'a' );      #bool(false)
echo "\n";
var_dump( null == 0 );        #bool(true)
var_dump( null == 1 );        #bool(false)
var_dump( null == -1 );       #bool(false)
var_dump( null == false );    #bool(true)
var_dump( null == null );     #bool(true)
var_dump( null == '' );       #bool(true)
var_dump( null == 'a' );      #bool(false)
echo "\n";
$a=0; var_dump( empty($a) );        #bool(true)
$a=1; var_dump( empty($a) );        #bool(false)
$a=-1; var_dump( empty($a) );       #bool(false)
$a=false; var_dump( empty($a) );    #bool(true)
$a=null; var_dump( empty($a) );     #bool(true)
$a=''; var_dump( empty($a) );       #bool(true)
$a='a'; var_dump( empty($a));      # bool(false)
echo "\n"; #new block suggested by @thehpi
var_dump( null < -1 ); #bool(true)
var_dump( null < 0 ); #bool(false)
var_dump( null < 1 ); #bool(true)
var_dump( -1 > true ); #bool(false)
var_dump( 0 > true ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( -1 > false ); #bool(true)
var_dump( 0 > false ); #bool(false)
var_dump( 1 > true ); #bool(true)

24
내 opionion에서 0 = 값은 0이고 null은 변수가 초기화되지 않았 음을 나타내는 플래그이므로 null은 말도 안됩니다. 감사합니다 PHP 팀
mercsen

1
로 시작하는 코드 섹션을 두 번 반복했습니다 var_dump( null == 0 );.
Sparky

2
PHP에서 정말로 이상한 것은 : null <-1 => TRUE
thehpi

1
@mercsen 최소한 PHP가 0 == null처럼 일관되게 동작한다면 괜찮을 것입니다. 이상하게도 0 == null하고 null == [],하지만 [] != 0!
nawfal

1
strrpos('fail', 'search') will return false, and not null내 의견으로는 정확합니다- null알 수없는 수단이라면 strrpos반환 null하는 것은 '문자열이 없습니다'보다는 '문자열이 있는지 모르겠습니다'라고 말하는 것과 같습니다.
Eborbob

22

아래는 예입니다.

            Comparisons of $x with PHP functions

Expression          gettype()   empty()     is_null()   isset() boolean : if($x)
$x = "";            string      TRUE        FALSE       TRUE    FALSE
$x = null;          NULL        TRUE        TRUE        FALSE   FALSE
var $x;             NULL        TRUE        TRUE        FALSE   FALSE
$x is undefined     NULL        TRUE        TRUE        FALSE   FALSE
$x = array();       array       TRUE        FALSE       TRUE    FALSE
$x = false;         boolean     TRUE        FALSE       TRUE    FALSE
$x = true;          boolean     FALSE       FALSE       TRUE    TRUE
$x = 1;             integer     FALSE       FALSE       TRUE    TRUE
$x = 42;            integer     FALSE       FALSE       TRUE    TRUE
$x = 0;             integer     TRUE        FALSE       TRUE    FALSE
$x = -1;            integer     FALSE       FALSE       TRUE    TRUE
$x = "1";           string      FALSE       FALSE       TRUE    TRUE
$x = "0";           string      TRUE        FALSE       TRUE    FALSE
$x = "-1";          string      FALSE       FALSE       TRUE    TRUE
$x = "php";         string      FALSE       FALSE       TRUE    TRUE
$x = "true";        string      FALSE       FALSE       TRUE    TRUE
$x = "false";       string      FALSE       FALSE       TRUE    TRUE

PHP에서 유형 비교 에 대한 자세한 내용은 이것을 참조하십시오 . 그것은 당신에게 명확한 이해를 제공해야합니다.


5

PHP에서는 === 및! == 연산자를 사용하여 값이 같은지 여부와 유형이 일치하는지 확인할 수 있습니다. 예를 들어, 그래서는 : 0 == false이다 true, 그러나 0 === false입니다 false. 동일은 간다 !=!==. 또한 null언급 된 연산자를 사용하여 다른 두 개와 비교할 때 비슷한 결과를 기대하십시오.

PHP에서는이 값의 품질이 보통 00 이 될 수있는 값을 반환 할 때 사용 되지만 때로는 함수가 실패했을 수도 있습니다. 이러한 경우 PHP로 돌아가서 falseidentity 연산자를 사용하여 이러한 경우를 확인해야합니다 ===. 예를 들어, 다른 문자열 내에서 한 문자열의 위치를 ​​검색하고을 사용하는 strpos()경우이 함수는 문자열이 맨 처음에 발견되면 문자열 위치를 찾지 못하면 0이 될 수있는 숫자 위치를 반환합니다. 모두 strpos()반환 false되면 결과를 처리 할 때이 점을 고려해야합니다.

함수에서 동일한 기술을 사용하면 표준 PHP 라이브러리에 익숙한 사람은 진행 상황과 반환 값이 원하는지 또는 처리하는 동안 오류가 발생했는지 확인하는 방법을 이해합니다. 실제로 함수 매개 변수도 마찬가지입니다. 배열 또는 문자열인지 여부에 따라 다르게 처리 할 수 ​​있으며이 기술은 PHP 전체에서 많이 사용되므로 누구나 쉽게 얻을 수 있습니다. 그래서 나는 그것이 힘이라고 생각합니다.


5

False, Null, Nothing, 0, Undefined

이들 각각은 실제 개념과 관련이있는 특정 의미를 갖습니다. 때때로 여러 의미가 단일 키워드 또는 값으로 과부하됩니다.

에서는 CC ++ , NULL, False0동일한 값으로 오버로드된다. C # 에서는 3 가지 고유 한 개념입니다.

null또는 NULL일반적으로 가치가 부족함을 나타내지 만 일반적으로 이유를 지정하지 않습니다. 0는 자연수 0을 나타내며 1, 2, 3 등과 형식이 동일하며 별도의 개념을 지원하는 언어 NULL에서는 숫자로만 처리해야합니다.

거짓 은 진실이 아님을 나타냅니다. 그리고 이진 값으로 사용 됩니다 . 설정되지 않았거나 의미하지도 않습니다 0. 단순히 이진 값 중 하나를 나타냅니다.

값이 널과 동일하지만 의도를 나타내는 것을 나타내도록 특별히 설정되지 않았 음을 나타낼 수있는 것은 없습니다.

일부 언어에서는 undefined는 코드에 실제 값을 지정하지 않았으므로 값을 아직 설정하지 않았 음을 나타냅니다.


흥미롭지 만 PHP에 대해서는 전혀 논의하지 않습니다.
브래드

4

난 그냥 중 하나 얻으려고 하루에 1/2을 낭비 0, null, false에서 돌아 strops!

논리가 올바른 방향으로 흐르지 않고 PHP 코딩에 블랙홀이있는 것처럼 보이기 전에 내가하려고했던 모든 것이 있습니다.

개념은 서버에서 호스팅되는 도메인 이름을 사용하고 루트 수준이 아닌지 확인하십시오. 여러 가지 방법이 있지만 다른 PHP 함수 / 구문으로 인해 다른 것을 선택했습니다.

어쨌든 여기는 cosing의 기초였습니다.

if (strpos($_SERVER ['SERVER_NAME'], dirBaseNAME ()) 
{ 
    do this 
} else {
    or that
}

{
echo strpos(mydomain.co.uk, mydomain);  

if ( strpos(mydomain, xmas) == null ) 
    {
        echo "\n1 is null"; 
    }

if ( (strpos(mydomain.co.uk, mydomain)) == 0 ) 
    {
        echo "\n2 is 0"; 
    } else {
        echo "\n2 Something is WRONG"; 
    }

if ( (mydomain.co.uk, mydomain)) != 0 ) 
    {
        echo "\n3 is 0"; 
    } else {
        echo "\n3 it is not 0"; 
    }

if ( (mydomain.co.uk, mydomain)) == null ) 
    {
        echo "\n4 is null"; 
    } else {
        echo "\n4 Something is WRONG"; 
    }
}

이 주제를 읽은 후 마침내 이것이 효과가 있음을 알았습니다 !!!

{
if ((mydomain.co.uk, mydomain)) !== false ) 
    {
        echo "\n5 is True"; 
    } else {
        echo "\n5 is False"; 
    }
}

이 기사를 보내 주셔서 감사합니다. 이제는 크리스마스이지만 하루 false가 될 수 있으므로 크리스마스가 아닐 수도 있습니다 NULL.

간단한 코드를 디버깅하는 데 하루를 낭비한 후에는 문제를 식별하기 위해 문제를 식별 할 수 있었기 때문에 이전에 알고 있었으면 좋겠다고 생각했습니다. 그것은하지 작업으로했던 False, NULL그리고 0모든없는 같은 True or False or NULL?


2

로부터 PHP 온라인 설명서 :

명시 적으로 값을 부울로 변환하려면 (bool) 또는 (boolean) 캐스트를 사용하십시오.
그러나 연산자, 함수 또는 제어 구조에 부울 인수가 필요한 경우 값이 자동으로 변환되므로 대부분의 경우 캐스트는 불필요합니다.
부울로 변환 할 때 다음 값은 FALSE로 간주됩니다.

  • 부울 FALSE자체
  • 정수``0 (제로)
  • float 0.0(0)
  • 빈 문자열과 문자열 "0"
  • 요소가없는 배열
  • 멤버 변수가없는 객체 (PHP 4 만 해당)
  • 특별한 유형 NULL (설정되지 않은 변수 포함)
  • 빈 태그로 작성된 SimpleXML 객체
    다른 모든 값 TRUE(모든 리소스 포함) 이 고려됩니다 .

따라서 대부분의 경우 동일합니다.

반면에 =====는 같은 것이 아닙니다. 정기적으로 "같음"연산자 만 있으면됩니다. 명확히하기 위해 :

$a == $b    //Equal. TRUE if $a is equal to $b.
$a === $b   //Identical. TRUE if $a is equal to $b, and they are of the same type. 

자세한 내용 은 PHP 온라인 문서 의 " 비교 연산자 "페이지를 확인하십시오 .

도움이 되었기를 바랍니다.


1

이러한 값의 차이는 항상 자세한 언어 별 규칙으로 귀결됩니다. PHP, PHP, Perl 또는 C 등에서 PHP에 대해 배우는 것이 반드시 사실은 아닙니다. 작업하는 언어에 대한 규칙을 배우는 것이 가치가 있지만, 너무 많이 의존하면 문제가 발생합니다. . 다음 프로그래머가 코드를 유지해야 할 때 Null과 False에 대한 약간의 세부 사항을 활용하는 구문을 사용했을 때 문제가 발생합니다 (예 :). 코드가 올바르게 표시되어야합니다 (반대로 잘못된 코드도 잘못 표시됨).


1

Null은 데이터베이스에서 "레코드 없음"또는 "정보 없음"을 나타내는 데 사용됩니다. 따라서 "이 사용자가 우리에게 전자 메일을 보내려고합니까"를 설명하는 비트 필드가있을 수 있습니다. 여기서 True는 그렇습니다. False는 아무 것도 보내지 않으려 고하지만 Null은 알지 그들은 외부 조인 등을 통해 올 수 있습니다.

Null의 논리적 의미는 종종 다릅니다. 일부 언어에서는 NULL이 다른 것과 같지 않으므로 if (a == NULL)은 항상 false입니다.

따라서 개인적으로 나는 항상 부울을 FALSE로 초기화하고 1에서 NULL로 초기화하면 조금 이상하게 보일 것입니다 (C에서도 두 가지가 모두 0 ... 스타일 일뿐입니다).


1

나쁜 개발자는 거기 코드에서 null / 0 / false의 모든 다른 용도를 찾습니다.

예를 들어, 개발자가하는 가장 일반적인 실수 중 하나는 함수를 사용하여 데이터 형식으로 오류 코드를 반환하는 것입니다.

// On error GetChar returns -1
int GetChar()

이것은 설탕 인터페이스의 예입니다. 이것은 "소프트웨어 개발 프로세스 디버깅"책과 다른 책 "올바른 코드 작성"에서 설명됩니다.

이것의 문제점은 char 유형에 대한 의미 또는 가정입니다. 일부 컴파일러에서 char 유형은 서명되지 않을 수 있습니다. 따라서 -1을 반환하더라도 컴파일러는 대신 1을 반환 할 수 있습니다. C ++ 또는 C에서 이러한 종류의 컴파일러 가정은 파악하기 어렵습니다.

대신 가장 좋은 방법은 오류 코드를 데이터와 혼합하지 않는 것입니다. 따라서 다음 기능을 수행하십시오.

char GetChar()

이제는

// On success return 1
// on failure return 0
bool GetChar(int &char)

이것은 개발자가 개발 상점에서 아무리 어리더라도 결코 잘못하지 않을 것임을 의미합니다. 이것은 코드의 중복성 또는 의존성에 대해 말하는 것이 아닙니다.

그래서 일반적으로 언어에서 첫 번째 클래스 유형으로 bool을 바꾸는 것은 괜찮으며 joel은 최근 포스트 캐스트와 함께 그것에 대해 이야기했다고 생각합니다. 그러나 일상 생활에서 데이터와 믹스 앤 매치 부울을 사용하지 마십시오. 완벽해야합니다.


1

PHP에서는 유형을 유효성 검사하는지 여부에 따라 다릅니다.

( 
 ( false !== 0 ) && ( false !== -1 ) && ( false == 0 ) && ( false == -1 ) &&
 ( false !== null ) && ( false == null ) 
)

기술적으로 null은 0x00PHP에 ( null == 0x00 ) && ( null !== 0x00 )있습니다.

0 정수 값입니다.


1

NULLPHP에서 흥미로운 사실 ​​중 하나 : var를으로 설정 NULL하면 마치 호출 한 것과 같습니다 unset().

NULL본질적으로 변수에 할당 된 값이 없음을 의미합니다. false유효한 부울 값은, 0유효한 정수 값이며, PHP는 사이에 상당히 추한 변환이 0, "0", "",와 false.


0

Null은 아무것도 아니며 False는 비트이며 0은 (아마도) 32 비트입니다.

PHP 전문가는 아니지만 일부 최신 언어에서는 서로 호환되지 않습니다. 나는 0과 false를 갖는 미스 교환이 가능하지만 부울이 실제 유형이면 메소드와 객체를 가질 수 있으므로 트레이드 오프 일뿐입니다. Null은 null이지만 본질적으로 아무것도 없습니다.


0

글쎄, PHP 시절부터 "==="부분에 대답하기에는 충분하지 않지만 대부분의 C 스타일 언어의 경우 포인터 값의 컨텍스트에서 NULL을 사용해야하며 부울로 false를 사용하고 0을 int와 같은 숫자 값 '\ 0'은 문자 컨텍스트의 관습적인 값입니다. 나는 또한 수레와 복식에 0.0을 사용하는 것을 선호합니다.

빠른 답변은 문맥입니다.


0

거의 모든 현대 언어에서 논리적으로 null 값이 없거나 포인터가 초기화되지 않은 포인터 (또는 참조)를 나타냅니다. 0은 정수 값 0이고, false는 false의 부울 값입니다. 예를 들어 C에서 복잡한 작업을 수행하려면 null, 0 및 false가 모두 동일한 방식으로 표시됩니다. PHP에서 어떻게 작동하는지 모르겠습니다.

더 복잡하게 만들기 위해 데이터베이스에는 null이라는 개념이 있는데, 이는 누락되거나 적용 할 수 없음을 의미하며 대부분의 언어에는 DBNull을 null에 직접 매핑 할 수있는 방법이 없습니다. 예를 들어 최근까지는 int가 null과 0이 구별되지 않았지만 nullable int로 변경되었습니다.

이 소리를 복잡하게해서 죄송합니다. 이것은 몇 년 동안 언어로 해리의 고수 지점이었으며 최근까지도 어느 곳에서도 명확한 해결책을 얻지 못했습니다. 사람들이 함께 물건을 뭉개거나 공백으로 만들거나 0은 데이터베이스에서 null을 나타내므로 항상 잘 작동하지는 않습니다.


0

False와 0은 개념적으로 유사합니다. 즉, 동형입니다. 0은 자연수의 대수의 초기 값이고, False는 부울 대수의 초기 값입니다.

다시 말해, 0은 자연수에 더하면 같은 숫자를 산출하는 숫자로 정의 될 수 있습니다.

x + 0 = x

마찬가지로 False는 그 값의 분리와 다른 값이 같은 값이되도록하는 값입니다.

x || False = x

널은 개념 상 완전히 다른 것입니다. 언어에 따라 다른 의미론이 있지만 "초기 값"을 False로 0으로 묘사하는 것은 없습니다. 널에 대한 대수는 없습니다. 변수와 관련이 있으며 일반적으로 변수에 현재 컨텍스트에서 특정 값이 없음을 나타냅니다. 대부분의 언어에는 Null에 정의 된 연산이 없으며 Null을 피연산자로 사용하는 것은 오류입니다. 일부 언어에는 "null"이 아닌 "bottom"이라는 특수 값이 있습니다.이 값은 종료되지 않는 계산 값의 자리 표시 자입니다.

나는 다른 곳에서 NULL의 의미에 대해 더 광범위하게 썼다.


1
주 제외, false == 0이 완전히 지연되었습니다. PHP가 데이터를 반환하거나 함수에서 실패하면 더욱 그렇습니다. mysql_insert_id의 리턴을 참조하십시오. "" "성공시 이전 쿼리에 의해 AUTO_INCREMENT 열에 대해 생성 된 ID, 이전 쿼리가 AUTO_INCREMENT 값을 생성하지 않으면 0, MySQL 연결이 설정되지 않은 경우 FALSE" ""기본적으로 A) id를 반환 할 수 있습니다. B) zero, C) false ... 이제 테이블의 첫 번째 항목 인 경우 id는 0입니다! 세 값 모두 동일합니다! 개발자는 세 가지 유형의 0을 어떻게 이해할 수 있습니까? ... 널에 대한 귀하의 게시물에 동의합니다.
gcb

0

누군가 'NULL'이 왜 비교 인스턴스의 문자열이 아닌지 설명해 줄 수 있습니까?

$x = 0;
var_dump($x == 'NULL');  # TRUE   !!!WTF!!!

1
PHP는 내부적으로 정수형으로 캐스트하고 비교합니다. php > var_dump((int) "NULL"); // => int(0) php > var_dump((int) "BLA"); // => int(0)php.net/manual/en/language.operators.comparison.php 참조 문자열과 리소스를 숫자로 변환, 일반적인 수학
Sevyls

-1

허위 문제는 PHP 기록에서 비롯됩니다. 문제는 잘 정의되지 않은 스칼라 유형을 대상으로합니다.

'*' == true -> true (string match)
'*' === true -> false (numberic match)

(int)'*' == true -> false
(string)'*' == true -> true

PHP7 엄격함은 한 단계 발전하지만 충분하지 않을 수 있습니다. https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.