PHP
PHP7과 PHP8 버전의 차이점
코딩박사
2025. 6. 17. 11:34
반응형
PHP 7과 PHP 8은 성능, 문법 개선, 새로운 기능 추가, 비호환성 변경 등에서 많은 차이가 있습니다. PHP 8은 단순한 업그레이드가 아니라, 언어 자체의 구조를 크게 개선한 버전입니다.
주요 차이점 요약
항목 | PHP 7.X | PHP 8.X |
출시 시기 | 2015~2020 | 2020년 11월 (8.0), 이후 8.1, 8.2 등 |
성능 | PHP 5 대비 대폭 향상 | PHP 7보다도 더 향상 (JIT 도입) |
JIT(Just-In-Time) 컴파일 | 없음 | 도입 (성능 개선) |
타입 시스템 | 제한적 | 개선됨 (Union Types 등) |
속성(Attributes) | 없음 (주석으로 처리) | 도입 (어노테이션처럼 사용) |
명명된 인자(Named Args) | 없음 | 있음 |
매개변수 타입 검사 | 제한적 | 더욱 엄격 |
Nullsafe Operator (?->) | 없음 | 도입 (코드 간결화) |
Match Expression | 없음 (switch만 있음) | 새 키워드 match 도입 |
Constructor Property Promotion | 없음 | 도입 (코드 간결화) |
성능 향상 | 매우 빠름 | 더 빠름 + 확장성 증가 |
1. JIT 컴파일 도입 (PHP 8)
- Just-In-Time 컴파일러는 일부 연산을 더 빠르게 수행하도록 개선
- 일반적인 웹 성능은 소폭 향상 (10~20%)
- 복잡한 수치 계산이나 벤치마크에서 성능 향상 크다.
2. 속성 (Attributes)
// PHP 7: 주석 기반
/**
* @Route("/home")
*/
// PHP 8: 정식 문법 도입
#[Route("/home")]
→ 프레임워크 (Symfony, Laravel 등)에서 메타데이터를 더 쉽게 처리 가능
3. Named Arguments
// 위치 기반 (PHP 7)
foo(1, true, 'bar');
// 이름 기반 (PHP 8)
foo(
id: 1,
active: true,
name: 'bar'
);
→ 가독성 및 인자의 순서 자유도 ↑
4. Nullsafe Operator (?->)
// PHP 7
if ($user && $user->profile && $user->profile->image) {
echo $user->profile->image;
}
// PHP 8
echo $user?->profile?->image;
→ null 체크 간소화
5. Match Expression
// PHP 7
switch($status) {
case 1:
$text = "Pending";
break;
case 2:
$text = "Approved";
break;
}
// PHP 8
$text = match($status) {
1 => "Pending",
2 => "Approved",
};
→ 표현식 기반, break 필요 없음, 타입 일치 검사도 수행
6. Constructor Property Promotion
// PHP 7
class User {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
}
// PHP 8
class User {
public function __construct(public string $name) {}
}
→ 생성자 + 속성 선언 간결하게 통합
*** 주요 비호환 변경 사항 (PHP 8) ***
- 일부 내장 함수의 경고가 예외로 변경
- get_class() 등에서 null 사용 시 오류 발생
- 자동 타입 변환 관련 에러 증가 → 타입에 민감해짐
- 일부 함수 제거/비권장됨 (each(), create_function() 등)
반응형