리소스(resource)는 외부 자원에 대한 참조를 담고 있는 특수한 변수 타입입니다. 파일 핸들, 데이터베이스 연결, URL 핸들 등이 대표적인 예이며, 모든 리소스는 시스템 내에서 고유한 ID로 식별됩니다.
기존 방식: int로 캐스팅하여 리소스 ID 얻기
PHP 8 이전 버전에서는 리소스 ID를 확인하려면 해당 리소스를 int 타입으로 직접 캐스팅해야 했습니다. 아래 예제를 살펴보겠습니다.
<?php
$x = fopen('test.txt', 'rb');
$id = (int) $x;
print_r($id);
?>
출력 결과
1
이 방식은 동작은 하지만, 캐스팅 과정에서 의도치 않은 타입 오류가 발생할 여지가 있어 안전하지 않다는 단점이 있었습니다.
PHP 8의 get_resource_id() 함수
PHP 8에서 새롭게 도입된 get_resource_id() 함수는 주어진 리소스의 ID를 반환하며, 항상 int 타입을 보장합니다. 덕분에 별도의 캐스팅 없이도 타입 안전성(type safety)이 유지되어 코드의 신뢰성이 크게 향상됩니다.
<?php
$x = fopen('test.txt', 'rb');
echo get_resource_id($x);
?>
출력 결과
1
정리
기존에는 (int) 캐스팅에 의존해야 했던 리소스 ID 확인 작업을, PHP 8부터는 get_resource_id() 함수 하나로 깔끔하고 안전하게 처리할 수 있습니다. 리소스를 다루는 코드에서 타입 안정성을 높이고 싶다면 이 함수를 적극적으로 활용하는 것이 좋습니다.