2009-03-21 1 views
1

값이 PHP에 존재하지 않거나 응용 프로그램 요구 사항에 충분하지 않다는 것을 정의하는 가장 좋은 방법은 무엇입니까?불충분 한 PHP 변수 감지 : FALSE 대 NULL vs unset() vs empty()?

$var = NULL, $var = array(), $var = FALSE?

그리고 테스트하는 가장 좋은 방법은 무엇입니까?

isset($var), empty($var), if($var != NULL), if($var)? 변수를 초기화합니다. 예 : NULL 문자열 인 경우 배열 인 경우 array()은 예기치 않은 결과없이 설정에서 작동한다는 점에서 몇 가지 이점이 있습니다.

foreach($emptyArray)은 아무런 결과도 출력하지 않지만, foreach($false)은 잘못된 변수 유형에 대해 불평 할 것입니다.

하지만 기본적으로 동일한 작업을 수행하는 데 너무 많은 다양한 방법을 사용하는 불필요한 번거 로움이 있습니다. 예. if(empty($var)) 또는 if ($var == NULL)


중복 : 사용하는 경우가 아닌 기존의 변수가 통지를 생성해야하기 때문에 Best way to test for a variable’s existence in PHP; isset() is clearly broken

+0

나는 그 게시물에 empty() 또는 FALSE를 사용하며 의도 된 용도에 따라 변수를 초기화 할 때의 이점에 대해 언급하지 않습니다. –

답변

8

는 이름이 각 기능은 서로 다른 목적을 위해, 그리고 그들은 적절하게 사용되어야한다 :

  • empty : 기존 변수 숫자 빈 간주 될 수있는 값 (0 인 경우, 빈 알려줍니다 어레이의 배열, NULL과 같음).
  • isset($var)은 :, 또는 extract, list 또는 eval 같은 다른 모호한 방법 스크립트가 변수가 할당 (즉 $의 VAR = 3)의 좌측 어디에 전에 라인 발생한 경우 말한다. 변수가 설정되어 있는지 확인하려면 방법입니다.
  • $var == NULL : 0 == NULL이므로 까다 롭습니다. 변수가 NULL인지 정말로 알고 싶다면 triple = : $ var === NULL을 사용해야합니다.
  • if($var) : $ var == NULL과 동일합니다.

유용한 링크는 http://us2.php.net/manual/en/types.comparisons.php입니다.

코딩하는 스크립트에 변수가 좋은지 확인하는 방법은 코드에 따라 달라 지므로 한 가지 방법 만 사용할 수 있습니다.

마지막 조언 : 변수를 배열로 생각하면 어딘가에 설정 될 때까지 기다리지 마십시오. 대신, 다음, 미리 초기화 코드 실행하자 어쩌면 새로운 배열로 덮어 얻을 것이다 :

// Initialize the variable, so we always get an array in this variable without worrying about other code. 
$var = array(); 

if(some_weird_condition){ 
    $var = array(1, 2, 3); 
} 

// Will work every time. 
foreach($var as $key => $value){ 
} 
+0

몇 가지 사소한 수정 : 빈 (빈 문자열이나 빈 배열뿐만 아니라) 변수가 FALSE 일 때마다 empty()도 true를 반환합니다. isset()은 다른 방법 (extract 등)으로 변수를 설정할 수 있기 때문에 변수 할당을 정확하게 찾지 않습니다. $ var가 NULL, FALSE 또는 0이 아닌 경우 if ($ var)가 true를 반환합니다. –

+0

고마워요! 답변에 텍스트의 일부를 추가했습니다. BTW, if ($ var) 내가 $ var == NULL과 동일하다고 말하면, 당신이 나열한 경우 (NULL, FALSE 및 0)에 TRUE가됩니다. – Seb

-1

내 투표() 해제 간다.

변수가 "존재하지 않음"이거나 null 인 경우 isset()이 false가되므로 테스트가 좀 더 복잡해집니다. 이 property_exists입니다

당신은 $ GLOBALS에서 클래스 속성의 경우 $ _POST 등
을 valiables에 대한 array_key_exists()를 사용할 수있다 (당신이 나 한테 물어 줄 경우 언어 designflaw)().

1

기억해야 할 또 다른 일을하다 PHP는이 NULL 또는 빈을 평가할 수 있습니다 무엇의 자유이기 때문에, ID 연산자 (===,! == 참조, http://php.net/operators.comparison 참조)를 사용해야합니다. 이러한 차이점은 값을 미묘한 차이로 구분해야하기 때문에 이러한 비교 및 ​​항등 함수가 모두 존재하는 이유입니다.

NULL을 명시 적으로 확인하고, 항상 $ var === NULL을 사용합니다.