if(!$value)

if($value == 'NULL')

if($value == '')

 

3가지 모두 같은 결과가 나오는건가요?

 

저는 첫번째를 즐겨 썼는데요.

 

오늘 코드를 추가하면서 문득 NULL 로 확인을 해보려고 코드를 넣으면서 이게 맞는건가 하는 생각이 들어서요.

3번째는 공백없는 빈값으로 이해했습니다.

  • profile

    진짜로 NULL값인 경우 1과 3은 참으로 나오고, 2는 거짓으로 나옵니다. NULL은 'NULL'이 아니니까요.

    변수가 아예 존재하지 않는 경우에도 NULL값과 동일하게 취급합니다.
     

    0이나 FALSE인 경우 1과 3이 참으로 나옵니다.

    빈 문자열인 경우 1과 3이 참으로 나옵니다.

    빈 배열인 경우 1만 참으로 나오고, 2와 3은 거짓으로 나옵니다.

     

    이런 경우와 구분하여 NULL값인지만 딱 알고 싶다면 === 연산자를 사용하거나,

    isset() 또는 is_null() 함수를 사용하여 명시적으로 비교하는 것이 좋습니다.

  • profile profile
    빈값일 경우 조건을 걸려 했는데 그럼 빈값인 겨우는 1번으로 해야 한다는 건가요?
    그럼 하던대로 해야겠네요? 변수에 값이 담기지 않으면 NULL로 체크하면 flase 가 나온다는거군요.
  • profile profile

    빈값이라는 표현의 의미가 불분명하기 때문에 실제 상황에서 이것저것 테스트해보시는 방법밖에 없습니다. 아예 변수가 없을 수도 있고, 있는데 NULL일 수도 있고, FALSE일 수도 있고, 0일 수도 있고, 빈 문자열일 수도 있습니다. 책상 위에 아예 아무 것도 없는 것과, 빈 봉투가 하나 있는 것과, 봉투 안에 백지가 한 장 들어 있는 것은 다르듯이...

    NULL로 체크하는 것과 'NULL'로 체크하는 것도 전혀 다릅니다. 질문에서 'NULL'이라고 하셨기 때문에 false가 나온다고 알려드린 것인데, 따옴표 없이 NULL이라고 하셨다면 상황이 달라집니다.

  • profile profile
    변수는 있고 거기에 담기는 값이 empty 공란이라고 보시면 될 겁니다.

    그럼 차라리 따옴표 없이 NULL 로 비교를 했으면 오히려 맞을 수도 있다는 것으로 읽혀지네요?
  • profile profile
    그렇기는 합니다만, NULL을 콕 찝어서 찾고 싶으신 것이 아니라면 굳이 NULL과 비교할 필요는 없지요. 공란을 의미하는 가장 분명한 문법은 ''이니까요.
  • profile profile

    'NULL' 은 의도적으로 값이 없을때 db 에 자료 밀어넣은 때 NULL로 넣었을때나 써먹을 수 있고 없는 값에 리턴 값을 받으려면 NULL로 하던지 아니면 0자리 공백 '' 을 쓰던지 아니면 값이 없는 !$변수 를 써라 이정도로 이해가 됩니다.

    이제 대충 다음에 이를 알고 테스트를 해보면 될 듯 합니다. 자세한 설명 감사합니다.

  • profile
    셋다 잘못됏어요.
    만약 1번과 같은 의도라면 isset($value) 를 해야됩니다.
    값이 정의되고, 빈값이 아닌걸 보려면 !empty($value)를 해야됩니다.
  • profile profile
    아니요. 빈 값인 걸 볼려고 합니다.
    db에 저장되는 필드에 에이전트가 있는데 에이전트 없이 접속되는 놈들이 있어서요.
  • profile profile

    빈 필드가 NULL일 수도 있고 빈 문자열('')일 수도 있습니다. 직접 확인해봐야 합니다.

    물론 !$value로 하면 대부분의 상황에서는 대충 다 맞기는 합니다. ㅎㅎ

  • profile profile
    서버 배열변수 user-agent 값은 항상 정의되어 있고 string 값이네요.
    그럼 3번째가 맞겠네요.
  • profile
    어느 코드가 올바른지 궁금할땐
    ini_set('display_errors' 1); 코드를 먼저 쓰고 코딩해보세요.
    error 나 warning 이 하나도 나오지 않아야 합니다.
  • profile profile
    네. 에러가 나오는 상황은 아닐거라서요. 제가 체크라려는 의도대로 체크가 안되는 것 일 것라서요. 알려주신 내용은 감사합니다.
  • profile profile
    XE는 기본적으로 모든 워닝을 숨겨버리기 때문에 도움이 안됩니다 ㅠㅠ
  • ?
    요거 보시면 정리가 됩니다.
    http://docs.php.net/manual/kr/types.comparisons.php
  • ? profile
    감사합니다. 살펴볼게요.