PHP 8 이전 버전에서는 예외(exception)를 처리하려면 반드시 해당 예외를 변수에 담아야 했습니다. 심지어 그 변수를 실제로 사용하지 않더라도 말이죠.
즉, PHP 8 이전에는 try 블록에서 던져진(throw된) 예외를 catch 블록에서 처리하려면 항상 변수에 캡처하는 것이 필수였습니다.
예제: PHP에서 예외를 변수로 캡처하는 기존 방식
<?php
function foo()
{
try {
throw new Exception('Hello');
}
catch (Exception $e) {
return $e->getMessage();
}
}
?>
설명: 위 코드에서는 catch 블록이 발생한 예외를 $e 변수에 캡처하고 있습니다. 이 $e 변수는 예외 메시지(message), 코드(code) 등 예외와 관련된 다양한 정보를 담을 수 있습니다.
PHP 8의 새로운 변화: 비캡처 캐치
PHP 8에서는 비캡처 캐치(non-capturing catches) 문법이 새롭게 도입되었습니다. 이제는 예외를 변수에 담지 않고도 곧바로 캐치하여 처리할 수 있습니다. 즉, 사용하지 않을 변수를 생략할 수 있게 된 것입니다.
예제: PHP 8에서 변수 없이 예외 캐치하기
<?php
try {
throw new Exception('hello');
}
catch (Exception) { // $e 변수 생략됨
}
?>
참고: 위 코드에서는 예외 정보를 담기 위한 $e 변수를 사용하지 않습니다. 예외 유형만 확인하면 되는 상황이라면 이처럼 변수 없이 간결하게 작성할 수 있습니다.
이러한 비캡처 캐치 문법은 코드를 더 깔끔하게 만들어 주며, 불필요한 변수 선언으로 인한 가독성 저하를 방지할 수 있다는 장점이 있습니다.