[php] PHP에서 Null vs. False vs. 0

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



답변

언어에 따라 다르지만 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(;-) 하드 디버깅으로 이어질 것입니다 전혀 설정되지 않음).


답변

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)


답변

아래는 예입니다.

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


답변

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

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

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


답변

False, Null, Nothing, 0, Undefined

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

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

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

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

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

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


답변

난 그냥 중 하나 얻으려고 하루에 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?


답변

로부터 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 온라인 문서 의 ” 비교 연산자 “페이지를 확인하십시오 .

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