OOP 변경 로그

OOP 변경 로그 (OOP Changelog)

PHP 객체 지향(OOP) 모델에 적용된 변경 사항을 버전별로 정리한 목록이다. 각 기능의 자세한 설명은 OOP 모델 문서에서 다룬다.

출처: OOP Changelog

본문

PHP OOP 모델에 대한 변경 사항이 여기에 기록됩니다. 이러한 기능에 대한 설명과 기타 참고 사항은 OOP 모델 문서에 정리되어 있습니다.

버전 설명
8.5.0 변경: static 을 반환하는 메서드는 이제 final 클래스에서 self 또는 클래스 자신의 타입을 반환 타입으로 선언하도록 오버라이드할 수 있습니다. 더 이상 확장할 수 없는 클래스에서는 이것들이 static 과 동일하기 때문입니다.
8.5.0 변경: 트레이트(traits)는 이제 부모 클래스보다 먼저 클래스에 바인딩됩니다.
8.4.0 추가: 프로퍼티 훅(Property Hooks) 지원.
8.4.0 추가: 지연 객체(Lazy Objects) 지원.
8.1.0 추가: 클래스 상수에 대한 final 수식자 지원. 또한 인터페이스 상수는 기본적으로 오버라이드 가능해졌습니다.
8.0.0 추가: null일 수 있는 객체의 프로퍼티와 메서드에 접근하는 nullsafe 연산자 ?-> 지원.
7.4.0 변경: __toString() 안에서 예외를 던질 수 있게 되었습니다.
7.4.0 추가: 제한된 반환 타입 공변성과 인자 타입 반공변성 지원. 완전한 variance 지원은 autoloading을 사용할 때만 가능합니다. 단일 파일 안에서는 비순환(비-cyclic) 타입 참조만 가능합니다.
7.4.0 추가: 클래스 프로퍼티에 타입을 지정할 수 있게 되었습니다.
7.3.0 비호환: 정수가 아닌 키를 가진 Traversable 의 인자 풀기(argument unpacking)는 더 이상 지원되지 않습니다. 이 동작은 의도된 것이 아니므로 제거되었습니다.
7.3.0 비호환: 이전 버전에서는 참조를 할당해 정적 프로퍼티를 분리하는 것이 가능했습니다. 이것이 제거되었습니다.
7.3.0 변경: instanceof 연산자는 이제 첫 번째 피연산자로 리터럴을 허용하며, 이 경우 결과는 항상 false 입니다.
7.2.0 폐기(권장 안 함): __autoload() 메서드는 spl_autoload_register() 를 권장하며 폐기되었습니다.
7.2.0 변경: object 는 클래스, 인터페이스, 트레이트의 이름으로 사용할 수 없습니다.
7.2.0 변경: 네임스페이스의 그룹 use 구문(group-use syntax)에 후행 쉼표(trailing comma)를 추가할 수 있습니다.
7.2.0 변경: 파라미터 타입 확장(parameter type widening). 오버라이드된 메서드와 인터페이스 구현의 파라미터 타입을 생략할 수 있게 되었습니다.
7.2.0 변경: 추상 클래스가 다른 추상 클래스를 상속할 때 추상 메서드를 오버라이드할 수 있습니다.
7.1.0 변경: voiditerable 은 클래스, 인터페이스, 트레이트의 이름으로 사용할 수 없습니다.
7.1.0 추가: 클래스 상수의 가시성(visibility)을 지정할 수 있게 되었습니다.
7.0.0 폐기: static으로 선언되지 않은 메서드에 대한 정적 호출.
7.0.0 폐기: PHP 4 스타일 생성자, 즉 정의된 클래스와 같은 이름을 가진 메서드.
7.0.0 추가: 그룹 use 선언(group use declaration): 같은 네임스페이스에서 가져오는 클래스, 함수, 상수를 단일 use 문으로 묶을 수 있습니다.
7.0.0 추가: new class 를 통한 익명 클래스(anonymous classes) 지원.
7.0.0 비호환: non-Traversable 객체를 순회하는 것이, 참조에 의한 배열 순회와 같은 동작을 하게 되었습니다.
7.0.0 변경: 사용된 두 트레이트에서 (호환되는) 프로퍼티를 정의해도 더 이상 오류를 촉발하지 않습니다.
5.6.0 추가: __debugInfo() 메서드.
5.5.0 추가: ::class 매직 상수.
5.5.0 추가: 예외 처리를 위한 finally .
5.4.0 추가: 트레이트(traits).
5.4.0 변경: 추상 클래스가 생성자의 시그니처를 정의하면 이제 그것이 강제됩니다.
5.3.3 변경: 네임스페이스 클래스 이름의 마지막 요소와 같은 이름의 메서드는 더 이상 생성자로 취급되지 않습니다. 이 변경은 네임스페이스가 없는 클래스에는 영향을 주지 않습니다.
5.3.0 변경: 프로토타입에 기본값이 있는 메서드를 가진 인터페이스를 구현하는 클래스는 이제 인터페이스의 기본값과 일치시킬 필요가 없습니다.
5.3.0 변경: 변수를 사용해 클래스를 참조할 수 있게 되었습니다(예: echo $classname::constant;). 단, 변수의 값은 키워드(self, parent 또는 static)일 수 없습니다.
5.3.0 변경: 매직 오버로딩 메서드가 static으로 선언되면 E_WARNING 수준 오류가 발생합니다. 또한 public 가시성 요구 조건을 강제합니다.
5.3.0 변경: 5.3.0 이전에는 __autoload() 함수에서 던진 예외를 catch 블록에서 잡을 수 없었고 치명적 오류가 발생했습니다. 이제 __autoload 함수에서 던진 예외는 catch 블록에서 잡을 수 있습니다. 단, 커스텀 예외를 던질 경우 그 커스텀 예외 클래스가 사용 가능해야 합니다. __autoload 함수는 커스텀 예외 클래스를 오토로드하기 위해 재귀적으로 사용될 수 있습니다.
5.3.0 추가: __callStatic 메서드.
5.3.0 추가: 클래스 상수와 프로퍼티 정의에서 heredoc 과 nowdoc 지원. 참고: heredoc 값은 큰따옴표 문자열과 같은 규칙을 따라야 합니다(예: 내부에 변수 없음).
5.3.0 추가: 늦은 정적 바인딩(Late Static Bindings).
5.3.0 추가: __invoke() 메서드.
5.2.0 변경: __toString() 메서드는 이전에는 echo 또는 print 와 직접 결합될 때만 호출되었습니다. 이제 어떤 문자열 문맥에서도(예: printf() 의 %s 수식자) 호출되지만, 다른 타입 문맥(예: %d 수식자)에서는 호출되지 않습니다. PHP 5.2.0 부터 __toString 메서드가 없는 객체를 문자열로 변환하면 E_RECOVERABLE_ERROR 수준 오류가 발생합니다.
5.1.3 변경: 이전 PHP 5 버전에서는 var 의 사용이 폐기된 것으로 간주되어 E_STRICT 수준 오류가 발생했습니다. 더 이상 폐기되지 않으므로 오류를 발생시키지 않습니다.
5.1.0 변경: __set_state() 정적 메서드는 이제 var_export() 에 의해 내보내진(exported) 클래스에 대해 호출됩니다.
5.1.0 추가: __isset()__unset() 메서드.

더 알아보기

  • PHP 객체 지향(OOP) 모델 관련 문서
  • 각 버전의 마이그레이션 가이드 — 상세한 호환성 변경 사항