PHP 8.x부터는 코드의 가독성과 안전성을 비약적으로 높여주는 새로운 문법들이 추가되었습니다. 엄격한 타입 비교와 값을 반환하는 Match 표현식, 널 포인터 예외를 우아하게 피하는 Nullsafe 연산자, 그리고 프레임워크 메타데이터의 표준이 된 Attributes 문법을 익혀보세요.
👉 7. Match Expression
더 안전하고 강력한 조건문
match 표현식은 기존의 switch 문을 개선한 기능입니다. 값을 반환할 수 있고(표현식), 일치 여부를 확인할 때 엄격한 비교(===)를 사용합니다.
또한 break를 생략해도 다음 케이스로 넘어가지 않으며(No type coercion, No fallthrough), 코드가 훨씬 간결하고 가독성이 뛰어납니다.
👉 8. Nullsafe Operator
안전한 체이닝 (Optional Chaining)
Nullsafe 연산자(?->)는 객체의 메서드나 속성에 연쇄적으로 접근할 때 유용합니다. 중간에 어느 하나라도 null이면 에러를 발생시키지 않고 전체 평가를 멈춘 뒤 null을 반환합니다.
이 기능 덕분에 불필요한 null 체크 조건문(if 문)을 대폭 줄일 수 있습니다.
👉 11. Attributes
코드 내장 메타데이터
Attributes(어트리뷰트)는 기존에 주석(DocBlock)으로 처리하던 메타데이터를 언어 차원의 공식 문법으로 대체한 것입니다.
주석을 파싱하는 대신 Reflection API를 통해 구조적이고 타입 안전하게 클래스, 메서드, 속성에 추가 정보를 부여할 수 있어 프레임워크 설계 시 핵심적으로 사용됩니다.
Match 표현식 (PHP 8.0+)
👉 작성 및 실행 결과
실제 코드에서 Match 표현식과 Nullsafe 연산자가 어떻게 동작하는지 브라우저 결과를 확인해보세요.
match_example.php
<?php
$status = 404;
// 기존의 switch 문보다 간결하고, === 로 엄격한 비교를 수행하며 결과를 즉시 반환합니다.
$message = match($status) {
200, 201 => 'Success',
400 => 'Bad Request',
404 => 'Not Found',
500 => 'Server Error',
default => 'Unknown Status',
};
echo "HTTP Status " . $status . " : " . $message . "\n";
localhost:8000/match_example.php
HTTP Status 404 : Not Found
nullsafe_example.php
<?php
class User {
public function getProfile() {
return null; // 프로필이 아직 없는 사용자
}
}
$user = new User();
// 이전 방식: if ($user && $user->getProfile() && $user->getProfile()->getAddress()) { ... }
// Nullsafe Operator 적용
// 중간에 하나라도 null이면 전체가 즉시 null로 평가되며 에러가 발생하지 않습니다.
$address = $user?->getProfile()?->getAddress();
var_dump($address); // NULL 출력