PHP에서 문자열을 부울(Boolean) 값으로 변환할 때 가장 안전하고 권장되는 방법은 filter_var() 함수에 FILTER_VALIDATE_BOOLEAN 필터를 함께 사용하는 것입니다. 이 필터는 "1", "true", "on", "yes"와 같은 문자열은 true로, "0", "false", "off", "no", ""(빈 문자열)과 같은 값은 false로 반환합니다.
단순히 (bool) 캐스팅을 사용하면 "false"라는 문자열조차 true로 평가되는 문제가 있기 때문에, 문자열 해석이 필요한 경우에는 filter_var()를 사용하는 것이 훨씬 정확합니다. 또한 인식 가능한 부울 형태가 아닌 일반 문자열(예: 날짜 표현)도 모두 false로 처리된다는 점에 유의하세요.
예제 1
다음은 filter_var() 함수를 사용해 문자열 값을 부울로 변환하는 기본적인 예제입니다.
<?php
echo "Displaying Sunday as first day of a week...\n";
$res = date('l - d/m/Y', strtotime("sunday 0 week"));
echo "First day (next week) = ", $res."\n";
var_dump(filter_var($res, FILTER_VALIDATE_BOOLEAN));
?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 날짜 문자열은 유효한 부울 형태가 아니므로 false가 반환됩니다.
Displaying Sunday as first day of a week...
First day (next week) = Sunday - 15/12/2019
bool(false)
예제 2
이번에는 '0', '1', '-0', ''(빈 문자열) 등 다양한 문자열 값이 각각 어떻게 변환되는지 살펴보겠습니다.
<?php
var_dump(filter_var('0', FILTER_VALIDATE_BOOLEAN));
var_dump(filter_var('1', FILTER_VALIDATE_BOOLEAN));
var_dump(filter_var('-0', FILTER_VALIDATE_BOOLEAN));
var_dump(filter_var('', FILTER_VALIDATE_BOOLEAN));
?>
출력 결과
실행 결과는 다음과 같습니다.
bool(false)
bool(true)
bool(false)
bool(false)
결과 정리
'1' → true
'0' → false
'-0' → false (음수 기호가 포함되어 유효한 참 값으로 인식되지 않음)
'' → false (빈 문자열은 항상 false)
참고로 FILTER_VALIDATE_BOOLEAN 필터는 스칼라 값이 아닌 경우(null, 배열, 객체 등) false가 아닌 null을 반환하므로, 입력값의 타입이 불확실한 상황이라면 이 점까지 고려하여 로직을 작성하는 것이 좋습니다.