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.