PHP 8.4에서는 객체 속성 접근 시 동작을 커스터마이징할 수 있는 속성 접근 후크 기능이 도입되었습니다.
이는 기존의 __get, __set 매직 메서드보다 더 정제된 방법으로 속성 접근에 개입할 수 있게 해 줍니다.
예시:
class Product {
public int $price = 100;
public function get_price(): int {
return $this->price;
}
public function set_price(int $value): void {
if ($value < 0) throw new Exception("Price cannot be negative");
$this->price = $value;
}
}
클래스 속성에 대해 읽기와 쓰기 권한을 분리하여 정의할 수 있게 되었습니다.
예를 들어, 외부에서는 읽기만 허용하고 쓰기는 내부에서만 가능하도록 설정할 수 있습니다.
예시:
class User {
public function __construct(
public readonly string $name,
protected int $age
) {}
}
배열 관련 유틸리티 함수들이 새롭게 추가되어 코드 간결성과 성능이 향상되었습니다.
추가된 주요 함수:
array_find(): 조건을 만족하는 첫 번째 요소 반환
array_find_key(): 조건을 만족하는 첫 번째 키 반환
array_any(): 조건을 만족하는 요소가 있는지 확인
array_all(): 모든 요소가 조건을 만족하는지 확인
예시:
$found = array_find([1, 2, 3, 4], fn($x) => $x > 2); // 3
파라미터 없는 클래스의 경우, () 없이 인스턴스를 바로 생성할 수 있게 되었습니다.
예시:
$obj = new MyClass; // 괄호 생략 가능
$obj->doSomething();
DOM 확장이 업데이트되어 HTML5 문서의 파싱과 조작이 더욱 정확하고 안정적으로 개선되었습니다.
Just-In-Time(JIT) 컴파일러가 내부적으로 최적화되어 PHP 8.3보다 약간의 성능 향상이 보고되었습니다.
메모리 효율성과 다중 요청 처리 시 효율성이 개선되었습니다.
기본 bcrypt 암호화의 비용(cost factor)이 상향 조정되어 기본 보안 수준이 높아졌습니다.
PHP 내장 서버에서 TLS 처리 방식의 보안성도 향상되었습니다.
class Example {
public const int MAX_COUNT = 10;
}
부모 클래스의 메서드를 오버라이드할 때, 명시적으로 표시 가능
json_validate(): JSON 문자열이 유효한지 확인
mb_str_pad(): 멀티바이트 문자열에 대한 str_pad() 기능 확장
랜덤 함수 확장 (Random\Engine)
gc_status() 정보 추가
unserialize()의 오류 처리 방식 개선
PHP 8.4는 이전 버전과 일부 비호환성이 발생할 수 있으므로, 코드베이스를 점검하고 테스트하는 것이 필수입니다.
사용 중인 프레임워크(Laravel, Symfony 등)와 라이브러리들이 PHP 8.4를 지원하는지 확인해야 합니다.
Composer를 통해 의존성 버전을 업데이트하고, CI 테스트를 통과시켜야 안전하게 운영 환경에 반영할 수 있습니다.