isset () 및 empty ()-사용할 사항


105

내 코딩 스타일을 개선하는 데 도움을 줄 수 있습니까? :) 확인해야 할 일부 작업에서 변수가 비어 있거나 무언가를 포함하고 있습니다. 이 작업을 해결하기 위해 일반적으로 다음을 수행합니다.

확인-이 변수가 설정되어 있습니까? 설정되어 있으면-확인합니다-비어 있는지 여부?

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

그리고 질문이 있습니다-empty () 전에 isset ()을 사용해야합니까-필요합니까? TIA!


비어있는 것은! isset ($ var) || $ VAR == 거짓
— zloctb

2
내 의견으로 empty ()는 PHP의 끔찍한 개발입니다. 어떤 형태로든 "0"을 "비어 있음"으로 간주하므로 디버깅 시간이 많이 걸리는 잘못된 트랩에 빠질 수 있습니다. 나는 말하고 싶다 : 어떤 희생을 치르더라도 피하고 논리를 직접 작성하라
— John

답변:


143

그것은 당신이 찾고있는 것에 달려 있습니다. 비어 empty있는지보고 싶다면 무언가가 설정되었는지 여부를 알고 싶다면 설정 여부를 확인하기 때문에 사용하십시오 isset.

Empty 변수가 설정되어 있는지 확인하고 그것이 null, "", 0 등인지 확인합니다.

Isset 설정되어 있는지 확인하기 만하면 null이 아닐 수 있습니다.

로 empty다음과 같은 일이 빈 간주됩니다 :

  • ""(빈 문자열)
  • 0 (정수로 0)
  • 0.0 (부동으로 0)
  • "0"(0은 문자열)
  • 없는
  • 그릇된
  • array () (빈 배열)
  • var $ var; (선언 된 변수이지만 클래스에 값이 없음)

에서 http://php.net/manual/en/function.empty.php


주석에서 언급했듯이 경고 부족은 empty ()에서도 중요합니다.

PHP Manual 말한다

empty ()는 (boolean) var의 반대입니다. 단 , 변수가 설정되지 않은 경우 경고가 생성되지 않습니다 .

isset 관련

PHP Manual 말한다

isset ()은 NULL로 설정된 변수를 테스트하는 경우 FALSE를 반환합니다.


귀하의 코드는 다음과 같이 괜찮습니다.

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

예를 들면 :

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}

그것은 평균입니다 - 내가 체크 위의 코드에서 변수 세트인지 두 번 :)?
— 드미트리 Belaventsev

비어 있는지 확인하십시오. 그렇지 않은 경우 PHP는 오류를 발생시키지 않습니다.
— Pez Cuckow

3
가장 큰 요점을 생략하고 empty있습니다. 테스트 된 변수가 존재하지 않을 때 경고를 표시하지 않습니다. 이것이이 함수의 요점입니다 == false. 그렇지 않으면 .
— deceze

1
그래서 매뉴얼에서 "변수가 설정되지 않았을 때 경고가 발생하지 않는다"는 사실이 나를 혼란스럽게했다. 경고가 없다고해서 아래 코드에 문제가 없다는 의미는 아닙니다. 이제는 분명합니다. 정말 고마워!
— Dmitry Belaventsev 2011-08-25

"isset은 설정 여부를 확인합니다. 여전히 null 일 수 있습니다." 사실이 아닙니다. issetnull (및 기존) 변수에서로 평가됩니다 false.
— netcoder 2011 년

12

특별한 경우 : if ($var).

변수가 있는지 여부를isset 모르는 경우 사용해야 합니다 . 그래도 첫 번째 줄에서 선언 했으므로 존재한다는 것을 알고 있으므로 그럴 필요 가 없습니다. 사용합니다 isset.

동일 간다 empty것만, empty또한 수표 결합 truthiness 값을. empty과 동등 !isset($var) || !$var하고 !empty동등하다 isset($var) && $var또는isset($var) && $var == true .

당신은 단지 변수를 테스트하려면 있어야합니다 에 대한 truthiness을 , if ($var)완벽하게 적절하고 점이다.


이것은 훨씬 더 잘 설명합니다. 이와 같은 다른 모든 경우에 대한 비교를 얻으면 !empty is equivalent to isset($var) && $var굉장 할 것입니다. 감사합니다 @deceze
— Vir

6

문서 에서 볼 수 있듯이 empty () 만 사용할 수 있습니다 . 변수에 값이 없으면 false를 반환합니다.

같은 페이지의 예 :

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

NULL이 아닌지 알고 싶다면 isset을 사용할 수 있습니다. 그렇지 않으면 empty () 단독으로 사용하는 것이 좋습니다.


반대표에 대한 설명? 그는 그들이 같은지 묻는 것이 아니라 비어 있음을 확인하기 전에 isset을 확인 해야하는지 묻습니다.
— chris

나는 반대표를 던지지 않았지만 "당신이 그것이 null이 아니라는 것을 알고 싶다면 isset 사용"은 정확하지 않습니다 : $var = null; isset( $var ) == true.
— JJJ

PHP5 / 4 매뉴얼에서 : isset ()- "변수가 설정되어 있고 NULL이 아닌지 확인합니다." us.php.net/manual/en/function.isset.php
— chris

2

여기에서의 출력이다 isset()및 empty()미표시 널 거짓 참 : 4에 대한 가능성이.

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

case를 제외하고 모든 'isset'결과가 'empty'결과와 반대임을 알 수 $b=false있습니다. false로 평가되는 모든 값 (값이 아닌 값이 아닌 null 제외)은 테스트시 true를 반환합니다.isset 하고 'empty'테스트 .

따라서 isset()변수의 존재가 걱정 될 때 사용 하십시오. 그리고 empty참 또는 거짓을 테스트 할 때 사용하십시오 . 공허함 문제, 사용의 실제 입력하는 경우 is_null와 ===0, ===false, ===''.


1

비어 있으면 var가 설정되지 않은 경우 true를 반환합니다. 그러나 isset은 var가 비어 있지 않아도 true를 반환합니다.


-3
$var = 'abcdef';
if(isset($var))
{
   if (strlen($var) > 0);
   {
      //do something, string length greater than zero
   }
   else
   {
     //do something else, string length 0 or less
   }
}

이것은 간단한 예입니다. 도움이되기를 바랍니다.

편집 : isset변수가 위와 같이 정의되지 않은 경우 추가 하면 오류가 발생하여 최소한 첫 번째 집합이 길을 따라 두통을 제거하는 데 도움이되는지 확인합니다.


7
strlen 0 미만 ? 그 문자열을보고 싶습니다.
— deceze

@deceze 대략적인 예 :) OK use = 0 not <0
— Akos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.