PHP 8.5

2 weeks ago 8

  • PHP 8.5는 파이프 연산자, clone with, 새 URI 파서 등 여러 기능을 포함한 주요 업데이트 버전
  • 파이프 연산자는 함수 호출 체인을 단순화해 가독성과 유지보수성을 높임
  • Clone with 기능은 객체 복제 시 속성 값을 동시에 변경할 수 있게 하며, 일부 readonly 속성에는 제한 존재
  • #[NoDiscard] , (void) 캐스트, 클로저 상수 표현식 지원, fatal error 백트레이스 출력 등 개발자 편의 기능 강화
  • 배열 처리, 속성 검증, 비표준 캐스트 폐기 등 세부 개선과 하위 호환성 관련 변경이 포함된 버전

주요 신규 기능

  • 파이프 연산자 (|>) 도입으로 함수의 결과를 다음 함수로 직접 전달하는 체인형 코드 작성 가능

    • 중첩 함수 호출 대신 단계별로 데이터를 변환하는 구조 지원
    • 예시 코드에서는 trim, str_replace, strtolower 등을 순차적으로 연결
  • Clone with 기능을 통해 객체 복제 시 속성 값을 동시에 변경 가능

    • 예시 클래스 Book에서 clone($this, ['title' => $title]) 형태로 사용
    • 단, 외부에서 readonly 속성을 복제할 때는 public(set) 접근 지정 필요
  • #[NoDiscard] 속성(void) 캐스트 추가

    • 반환값을 무시하면 경고를 발생시키는 함수 표시 가능
    • (void) 캐스트를 사용하면 경고 억제 가능
  • 클로저 개선으로 상수 표현식 내에서 클로저 및 일급 호출 가능 객체 사용 가능

    • 예시에서는 #[SkipDiscovery(static function (...))] 형태로 속성 내 정의
    • 이러한 클로저는 반드시 static으로 선언해야 하며 외부 변수 접근 불가
  • Fatal error 백트레이스 출력 기능 추가

    • 이전에는 표시되지 않던 스택 추적 정보가 오류 메시지에 포함되어 디버깅 용이

배열 및 URI 관련 기능

  • array_first() , array_last() 함수 추가

    • 배열의 첫 번째 및 마지막 요소를 간단히 반환
    • 기존 array_key_first()와 array_key_last()를 이용한 복잡한 접근 방식 대체
  • 새로운 URI 파서 추가

    • Uri\Rfc3986\Uri 클래스를 통해 getHost(), getScheme(), getPort() 등 메서드 제공
    • URI 조작 및 분석을 단순화

속성 및 검증 관련 기능

  • #[DelayedTargetValidation] 속성 도입
    • #[Override] 등 일부 속성의 검증 시점을 컴파일 타임에서 런타임으로 지연 가능
    • 하위 호환성 문제를 완화하기 위한 목적

기타 소규모 변경 사항

  • 정적 속성의 비대칭 가시성(asymmetric visibility) 지원
  • 클래스 외 상수에도 속성(attribute) 부여 가능
  • 생성자 프로퍼티 승격(property promotion)final 속성에도 적용 가능
  • #[\Override] 속성프로퍼티에도 적용 가능
  • Dom\Element::$outerHTML 속성 추가
  • Exif 확장HEIF/HEIC 이미지 지원
  • filter_var() 호출 시 FILTER_THROW_ON_FAILURE 플래그 추가

폐기 및 비호환 변경

  • 비표준 캐스트 이름 (boolean), (integer) 등 사용 중단
  • 백틱(```)을 shell_exec()의 별칭으로 사용하는 방식 폐기
  • 상수 재선언 기능 폐기
  • disabled_classes ini 설정 제거
  • 전체 변경 및 폐기 목록은 PHP 8.5 업그레이드 문서에서 확인 가능

전체 요약

  • PHP 8.5는 코드 가독성, 디버깅, 속성 처리, 배열 조작 등 전반적인 개발 경험을 개선한 버전
  • 파이프 연산자URI 파서는 실무 코드 단순화에 직접적인 영향을 미침
  • 속성 검증 지연, 새 배열 함수, 백트레이스 출력 등은 유지보수성과 안정성을 높이는 변화
  • 일부 비표준 문법 및 설정 폐기로 코드 정비 필요
  • 전체적으로 언어 일관성 강화와 개발자 편의성 향상이 중심인 릴리스

Read Entire Article