PHP 초기 버전에서는 변수의 타입을 확인할 때 gettype() 함수를 사용했습니다. 이 함수는 변수의 타입을 문자열 형태로 반환하며, integer(정수), string(문자열), array(배열), boolean(불리언), double(실수), resource(리소스), NULL, unknown type 등 가능한 모든 타입 값을 반환합니다.
gettype() 함수의 문제점
그러나 gettype() 함수에는 몇 가지 불편한 점이 있었습니다. 이 함수는 개발자에게 익숙한 네이티브 타입 이름을 그대로 반환하지 않기 때문입니다. 예를 들어 float 대신 double을 반환하고, int 대신 integer를 반환하는 식입니다. 이로 인해 코드의 가독성이 떨어지고, 타입 검사 로직에서 예상치 못한 결과가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 PHP 8에서는 새로운 get_debug_type() 함수가 도입되었습니다.
PHP 8의 get_debug_type() 함수란?
PHP 8의 get_debug_type() 함수는 변수의 실제 네이티브 타입을 정확하게 반환합니다. double 대신 float를, integer 대신 int를 반환하며, 객체가 전달될 경우 해당 클래스 이름도 자동으로 확인하여 반환합니다.
get_debug_type() 함수는 다음과 같은 상황에서 특히 유용합니다.
- 디버깅: 변수의 실제 타입을 빠르고 정확하게 파악할 수 있습니다.
- 비즈니스 로직: 조건 분기 시 정확한 타입 검사가 필요한 경우 활용할 수 있습니다.
- 에러 리포팅: 오류 메시지에 기대했던 타입과 실제 받은 타입을 명확하게 표시할 수 있습니다.
예제 1: PHP에서 gettype() 함수 사용하기
<?php
class Novel {}
class Comment {}
$novel = new Novel();
if (!($novel instanceof Comment)) {
echo 'Expected ' . Comment::class . ', got ' .
(is_object($novel) ? get_class($novel) : gettype($novel));
}
?>출력 결과
Expected Comment, got Novel
위 예제에서처럼 기존 방식에서는 객체 여부를 판단하기 위해 is_object()와 get_class()를 함께 사용해야 하는 번거로움이 있었습니다.
예제 2: PHP 8에서 get_debug_type() 함수 사용하기
<?php
class Novel {}
class Comment {}
$novel = new Novel();
if (!($novel instanceof Comment)) {
echo 'Expected ' . Comment::class . ', got ' . get_debug_type($novel);
}
?>출력 결과
Expected Comment, got Novel
정리
get_debug_type()은 객체와 원시 타입을 하나의 함수 호출만으로 처리할 수 있어 코드가 훨씬 간결해집니다. PHP 8 이상 환경이라면 변수 타입 확인이 필요한 모든 경우에 gettype() 대신 get_debug_type()을 사용하는 것이 좋습니다. 더 정확한 타입 정보와 깔끔한 코드를 동시에 얻을 수 있기 때문입니다.