Menu

PHP empty(): 빈 문자열, 빈 배열, 0 확인하기

empty($var)는 변수가 없거나 거짓으로 평가되면 true를 반환합니다: null, false, 0, 0.0, "", "0", []. 정의되지 않은 변수나 키에 대해 경고하지 않습니다. "0"이 빈 값인 이유, 빈 문자열과 빈 배열을 정확히 확인하는 법, empty와 isset, 폼 입력 검증을 배웁니다.

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

empty($var)는 변수가 존재하지 않거나 값이 거짓으로 평가되면 true를 반환합니다: null, false, 0, 0.0, "", "0", 빈 배열 []. 그 밖의 값에는 false를 반환합니다. isset()처럼 정의되지 않은 변수나 배열 키에 대해 절대 경고하지 않습니다.

empty($x)는 !isset($x) || !$x와 같습니다. 다시 말해 없거나, false로 변환되는 경우입니다.

빈 값으로 취급되는 값

표에서 값을 골라 empty()를 isset(), (bool) 캐스트와 나란히 확인하세요. 모든 칸은 PHP 8.3이 계산했습니다.

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

양쪽 끝에 의외의 결과가 있습니다. "0"은 빈 값인데, " "(공백), "0.0", "null", [0]은 빈 값이 아닙니다.

"0"은 빈 값: 대표적인 버그

"0"이 거짓으로 평가되기 때문에 empty()는 수량 0, 점수 0, PIN "0"을 "입력 없음"으로 취급합니다. 모든 값이 문자열로 도착하는 폼에서 문제가 됩니다.

텍스트 입력에서 "아무것도 입력하지 않음"을 확실히 확인하는 방법은 trim($value) === ""입니다. empty()는 0이 정말 아무것도 아님을 뜻하는 값에만 쓰세요.

문자열이 비어 있는지 확인

빈 문자열인지 정확히 확인하려면 ""와 비교하세요. 공백도 빈 것으로 보려면 먼저 trim을 하세요. PHP 5.5부터 empty()는 표현식을 받으므로 empty(trim($s))도 동작합니다(다만 같은 "0" 문제가 있습니다).

PHP 8.1 이상에서 trim()은 null을 받으면 deprecation 알림을 내므로, 블록에서는 trim($s ?? "")로 썼습니다.

배열이 비어 있는지 확인

배열에서는 empty($arr), $arr === [], count($arr) === 0이 모두 같은 답을 줍니다. empty()는 존재하지 않을 수도 있는 변수나 키에도 동작한다는 장점이 있습니다.

콜백 없는 array_filter()는 거짓으로 평가되는 값을 모두 제거하므로, "이 배열에 실제 값이 있는가"를 빠르게 묻는 방법입니다.

필수 폼 필드 검증

0이 유효한 답이 아니라면 !empty()는 필드를 필수로 만드는 흔한 방법입니다. 이 블록을 실행하고 필드를 비운 채 Send를 누른 다음, 값을 채워 다시 보내세요. $_POST가 채워진 채로 스크립트가 한 번 더 실행됩니다.

empty($_POST["terms"])는 체크박스의 두 경우를 모두 처리합니다. 아예 전송되지 않은 경우와 빈 값으로 전송된 경우입니다. 폼 페이지에서는 필드별 에러 메시지까지 다룹니다.

empty와 isset

둘 다 정의되지 않은 변수와 키에 안전합니다. 답하는 질문이 다릅니다.

  • isset($x): 존재하고 null이 아닌가? 선택적 키, 체크박스, "전송되기는 했는가"에 쓰세요.
  • !empty($x): 존재하고 참으로 평가되는가? 0과 "0"을 인정하지 않는 "실제 값이 있는가"에 쓰세요.
  • $x === "" 또는 $x === []: 정확히 비어 있는가? 0이 유효한 값일 때 쓰세요.

나머지 절반은 isset 페이지에서 다루며, 여러 변수를 한 번에 확인하는 isset()과 array_key_exists()와의 차이도 있습니다.

자주 묻는 질문

PHP의 empty()는 어떤 값을 빈 값으로 보나요?

empty($x)는 $x가 존재하지 않거나 null, false, 0, 0.0, "", "0", []일 때 true입니다. 나머지는 빈 값이 아니며, " "(공백), "0.0", "false", [0]도 포함됩니다.

PHP에서 "0"이 빈 값인 이유는?

empty()는 정의되지 않은 변수에 대한 경고가 없는 !$x와 같고, 문자열 "0"은 false로 변환됩니다. 그래서 0이 유효한 답인 필드에는 empty()가 맞지 않습니다. 대신 $x === ''나 trim($x) === ''를 확인하세요.

PHP에서 배열이 비어 있는지 어떻게 확인하나요?

empty($arr)와 $arr === [] 모두 동작하고, count($arr) === 0도 됩니다. empty()는 변수가 설정되지 않았을 때도 true를 반환하지만, 정의되지 않은 변수에 count()를 쓰면 경고한 뒤 null에 대해 TypeError를 던집니다.

isset() 대신 empty()는 언제 써야 하나요?

값이 존재하는지만 알면 될 때(체크박스가 전송됨, 설정 키가 있음)는 isset()을 쓰세요. 값이 비어 있지도 않아야 할 때, 예를 들어 필수 텍스트 필드에는 !empty()를 쓰세요. empty('0')이 true이므로 0이 유효한 필드에서는 주의하세요.

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

Coddy로 코딩 배우기

시작하기