isset ()과! empty ()를 모두 확인해야하는 이유


269

사이에 차이가 isset하고 !empty. 이 이중 부울 검사를 수행하면이 방법이 올바른지 또는 중복입니까? 같은 일을하는 더 짧은 방법이 있습니까?

isset($vars[1]) AND !empty($vars[1])

3
다른 유형의 변수로 변수를 사용한 결과에 대한 멋진 차트가 있습니다 (차이가 있습니다) : virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php
Jeff Clayton

명백한 정확한 보수는 isset 및 is_null이지만! empty는 몇 가지 다른 것을 포함합니다. 테스트하려는 데이터 유형에 따라 다릅니다.
Jeff Clayton

답변:


419

이것은 완전히 중복됩니다. empty의 약칭이며 !isset($foo) || !$foo, !empty유사합니다 isset($foo) && $foo. 즉 , 값 의 진실성 에 대한 추가 검사와 empty반대의 작업을 수행 합니다. isset

즉, empty와 동일 !$foo하지만 변수가 존재하지 않으면 경고가 표시되지 않습니다. 이것이이 함수의 핵심입니다. 변수 설정에 대한 걱정없이 부울 비교를 수행하십시오.

매뉴얼 은 다음과 같이 말합니다.

empty()반대이며 (boolean) var, 변수가 설정되지 않은 경우에 경고를 출력하지 않는 것을 제외.

!empty($vars[1])여기서 간단히 사용할 수 있습니다 .


7
그러나 그렇지 않은 경우 $vars[1]통지를 받게됩니다.
karim79

6
나는 그 아이디어를 어디서 얻었는지 전혀 모른다. 게다가 하나.
karim79

8
@karim IMO empty는 PHP에서 가장 오해 된 기능 중 하나입니다. "경고가 생성되지 않음"에 대한 작은 스 니펫은 간과하기 매우 쉽습니다. 여기에 게시하려면 문서를 몇 번 스캔해야했습니다.
deceze

2
empty($vars[1])경고를 $vars[1]설정하지 않아도 설정되지는 않습니다 echo $vars[1]. 를 사용하여 사실을 확인했습니다 echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Amil Waduwawara

4
@Shahor 많은 언어가로 간주 0됩니다 false. PHP만이 유일한 것은 아닙니다. 여전히 불만이 무엇인지 확실하지 않습니다.
deceze

33

isset() 변수가 설정되어 있고 null이 아닌지 테스트합니다.

http://us.php.net/manual/en/function.isset.php

empty() 변수가 특정 값으로 설정되면 true를 반환 할 수 있습니다.

http://us.php.net/manual/en/function.empty.php

이를 설명하려면 $ the_var를 할당 해제하고 0으로 설정하고 1로 설정하여 다음 코드를 시도하십시오.

<?php

#$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>

12

허용 된 답변이 맞지 않습니다.

isset ()은 ! empty ()와 동일 하지 않습니다 .

이 경로를 따라 가면 다소 불쾌하고 디버그하기 어려운 버그가 발생합니다. 예를 들어이 코드를 실행하십시오.

<?php

$s = '';

print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";

?>

https://3v4l.org/J4nBb


7
허용 된 답변은 결코 isset이에 상응 하는 것은 아닙니다 !empty.
deceze

8
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
    echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
    echo '$a is not empty';
} else {
    echo '$a is empty';
}

1
그러나 대소 문자를 설정하지 않은 변수를 처리하지 않았습니다.
Amil Waduwawara

3

비어있는 확인은 참조 된 변수 / 배열이 PHP doc (empty) 을 확인하면 값 이 있습니다. 이것은 emtpy로 간주됩니다.

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

isset 동안 변수가 설정되어 있고 PHP doc (isset) 에서도 찾을 수있는 null이 아닌지 확인하십시오.


2

필요하지 않습니다.

변수가 존재하지 않으면 경고가 생성되지 않습니다. 즉, empty ()는 본질적으로! isset ($ var) || $ var == 거짓.

php.net


2
empty는 이미 (not) isset을 검사하기 때문에 PHP 버전에서는 필요하지 않습니다. empty가 이제 질문과 함께 표현식을 지원한다는 사실을 혼동하고 있습니다.
alxgb

5 년 후만 사실입니다.
레논

2

isset($vars[1]) AND !empty($vars[1])와 같습니다 !empty($vars[1]).

경험적으로 보여주기 위해 간단한 코드를 준비했습니다.

마지막 행은 정의되지 않은 변수입니다.

+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| ''        | true    | true    | false    | false               |
| ' '       | false   | true    | true     | true                |
| false     | true    | true    | false    | false               |
| true      | false   | true    | true     | true                |
| array ()  | true    | true    | false    | false               |
| NULL      | true    | false   | false    | false               |
| '0'       | true    | true    | false    | false               |
| 0         | true    | true    | false    | false               |
| 0.0       | true    | true    | false    | false               |
| undefined | true    | false   | false    | false               |
+-----------+---------+---------+----------+---------------------+

그리고 코드

$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;

function compare($var)
{
    print(var_export($var, true) . "|" .
        var_export(empty($var), true) . "|" .
        var_export(isset($var), true) . "|" .
        var_export(!empty($var), true) . "|" .
        var_export(isset($var) && !empty($var), true) . "\n");
}

for ($i = 1; $i <= 9; $i++) {
    $var = 'var' . $i;
    compare($$var);
}

@print(var_export($var10, true) . "|" .
    var_export(empty($var10), true) . "|" .
    var_export(isset($var10), true) . "|" .
    var_export(!empty($var10), true) . "|" .
    var_export(isset($var10) && !empty($var10), true) . "\n");

함수 자체는 범위 자체에서 임시 변수를 생성하므로 정의되지 않은 변수는 함수 외부에서 평가해야합니다.


0

"빈": 변수에서만 작동합니다. 비어 있으면 변수 유형에 따라 다른 의미를 가질 수 있습니다 (수동 확인 : http://php.net/manual/en/function.empty.php ).

"isset": 변수가 있는지 확인하고 true NULL 또는 false 값을 확인합니다. "unset"을 호출하여 설정을 해제 할 수 있습니다. 다시 한 번 매뉴얼을 확인하십시오.

둘 중 하나를 사용하는 것은 사용중인 변수 유형에 따라 다릅니다.

변수가 있는지 먼저 확인하고 실제로 NULL 또는 비어 있지 않은지 확인하기 때문에 둘 다 확인하는 것이 안전합니다.


3
@szahn "두 가지 모두를 확인하는 안전"-프로그래머는 안전을 위해 원하는 모든 것을 확인할 수 있습니다. 그러나 코드가 중복되면 프로그래머로 중복 될 수 있습니다.
madlopt

0

동일한 페이지를 사용하여 아래와 같이 제출 버튼을 통해 추가 / 편집하면

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">

우리는 사용해서는 안됩니다

isset($_POST['edit_id'])

bcoz edit_id는 페이지 추가 또는 편집 여부에 관계없이 항상 설정됩니다. 대신 아래 조건을 확인해야합니다.

!empty($_POST['edit_id'])

이전 게시물이 bcoz로 제출되었습니다. 실수로 Enter 키를 누르십시오. 여기 내 완전한 대답이 있습니다 ... 왜 downvote? :(
diEcho

0
  • PHP 웹 사이트에서 다음 empty()함수를 참조하십시오 .

비어 있지 않고 0이 아닌 값이 FALSE있으면 반환 var합니다.

알아두면 좋은 것입니다. 즉, 기능을 사용할 때 NULL, 0에서 "" 까지 모든 것이 반환 TRUE됩니다 empty().

  • 다음은 isset()함수가 반환 하는 내용에 대한 설명입니다 .

존재하는 TRUE경우 반환 var합니다. FALSE그렇지 않으면.

즉, 존재하지 않는 변수 (또는 NULL값 이 엄격히 FALSE지정된 변수 ) 만 isset()함수에서 반환 됩니다 . 0빈 텍스트 문자열 등 여부에 관계없이 모든 유형의 값을 가진 모든 변수 는를 반환 TRUE합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.