Menu

PHP isset(): 변수와 배열 키 존재 여부 확인

isset($var)는 변수가 존재하고 null이 아니면 true, 아니면 false를 반환하며 경고를 내지 않습니다. 배열 키와 객체 속성도 확인합니다: isset($user['email']). 여러 변수 확인, 중첩 키, isset과 empty, isset과 array_key_exists, 폼 제출 확인을 배웁니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

isset($var)는 변수가 존재하고 값이 null이 아니면 true를 반환합니다. 정의되지 않은 변수, unset된 변수, null을 담은 변수에는 false를 반환하며, 절대 경고를 출력하지 않습니다.

isset()은 무언가가 있는지만 봅니다. 0, "", []처럼 설정되었지만 비어 있는 값도 true를 반환합니다. "설정되어 있고 비어 있지 않음"을 원한다면 empty를 부정해서 쓰세요.

isset으로 배열 키 존재 확인

isset()이 가장 많이 쓰이는 곳입니다. 없는 키를 읽으면 일반적인 PHP 환경에서 Warning: Undefined array key가 출력되지만, 먼저 isset()으로 확인하면 출력되지 않습니다. 중첩 키에도 동작하며, 처음으로 없는 단계에서 조용히 멈춥니다.

값이나 기본값만 필요하다면 $user["website"] ?? "none"이 같은 확인을 한 번에 합니다. null 병합 연산자를 보세요.

여러 변수를 isset으로 확인

인자를 여러 개 넘기면 isset()은 모두 설정되어 있고 null이 아닐 때만 true를 반환합니다. 필요한 필드가 모두 도착했는지 확인하는 짧은 방법입니다.

문자열과 객체에서 isset

문자열에서 isset($str[5])는 오프셋 5에 문자가 있는지 확인하므로 간단한 길이 확인이 됩니다. 객체에서는 속성을 확인하며, private 데이터를 가진 클래스에서는 클래스가 __isset() 메서드를 정의했다면 isset()이 그것을 호출합니다.

isset, empty, is_null 비교

표에서 $x 값을 골라 세 가지 확인과 단순 (bool) 캐스트를 비교하세요. 모든 칸은 PHP 8.3이 계산했습니다.

$x의 각 값에 대한 isset, empty, is_null
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

기억할 패턴:

  • isset()은 null과 존재하지 않는 것에 대해서만 false입니다.
  • empty()는 그것들과 함께 거짓으로 평가되는 모든 값에 대해 true입니다: false, 0, 0.0, "", "0", [].
  • is_null()은 존재하는 변수에 대해 isset()의 반대 결과를 주지만, 변수가 정의되지 않았으면 경고합니다. 대신 isset()이나 === null을 쓰세요.

폼이 제출되었는지 확인

isset()은 폼 필드가 도착했는지 보는 전통적인 방법입니다. 이 블록을 실행하고 이름을 입력한 뒤 Send를 누르세요. $_POST가 채워진 채로 같은 스크립트가 다시 실행됩니다.

빈 텍스트 필드도 ""로 전송되므로, 어떤 제출 후든 isset($_POST["name"])은 true입니다. 체크하지 않은 체크박스는 아예 전송되지 않으므로, 체크박스에는 isset()이 정확히 맞는 검사입니다. 비어 있지 않은 값을 요구하려면 블록에서처럼 trim한 문자열을 확인하세요. 검증까지 갖춘 완전한 폼은 폼 페이지에서 만듭니다.

isset과 array_key_exists

둘은 값이 null인 키를 빼고 모든 경우에 일치합니다. isset()은 그것을 없는 것으로 취급하고, array_key_exists()는 그렇지 않습니다.

데이터에서 "null로 설정됨"이 "설정되지 않음"과 다른 의미라면 array_key_exists()를 쓰세요. 아니라면 isset()이 더 짧고, 함수 호출이 아니라 언어 구문이라 조금 더 빠르기도 합니다.

흔한 실수: 표현식에 isset 사용

isset()은 변수, 배열 요소, 속성만 받습니다. 함수 결과나 상수를 넘기면 컴파일 에러입니다.

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

먼저 결과를 변수에 저장하거나, 값 자체를 검사하세요. 메시지가 제안하는 null !== $expr나, 문자열이라면 trim($input) !== ""입니다.

자주 묻는 질문

PHP에서 isset()은 무엇을 하나요?

isset($x)는 $x가 존재하고 null이 아니면 true를, 아니면 false를 반환합니다. 정의되지 않은 변수나 배열 키에 대해 경고를 내지 않으므로 isset($_POST['email']) 같은 요청 데이터에도 안전합니다.

PHP에서 isset()과 empty()의 차이는 무엇인가요?

isset()은 "존재하고 null이 아닌가"를 묻고, empty()는 "없거나 거짓으로 평가되는가"를 묻습니다. 0, "", "0", []에 대해 isset()은 true를, empty()도 true를 반환합니다. null이나 없는 키에는 isset()이 false, empty()가 true입니다. !empty($x)는 isset($x) && $x가 참인 것과 같습니다.

isset()으로 여러 변수를 확인할 수 있나요?

네: isset($a, $b, $c)는 모두 설정되어 있고 null이 아닐 때만 true를 반환합니다. 설정되지 않은 첫 번째 변수에서 멈춥니다.

isset()과 array_key_exists() 중 무엇을 써야 하나요?

둘은 키가 값 null로 존재할 때만 다릅니다: isset($arr['k'])는 false를, array_key_exists('k', $arr)는 true를 반환합니다. null이 의미 있는 저장 값이라면 array_key_exists를 쓰고, 아니라면 isset이 더 짧고 조금 더 빠릅니다.

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기