PHP 5.2에서 추상 정적 클래스 메소드 폐지
PHP 5.2 이상에서는 클래스 내에서 추상 정적 메소드 사용이 금지됩니다. 이러한 결정은 감독, 설계 결함, self 키워드에 대한 오해가 결합된 결과입니다.
문제가 있는 컨텍스트
처음에는 PHP 5.0x와 5.1x가 실수로 클래스 내에서 추상 정적 함수 선언을 허용했습니다. 그러나 이는 늦은 정적 바인딩이 없기 때문에 쓸모가 없게 되었습니다. 결과적으로 다음과 같은 코드는 실패합니다.
abstract class ParentClass { static function foo() { self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
이 예에서 foo()의 self::bar() 호출은 foo( )은 ChildClass의 메서드로 호출됩니다. 결과적으로 코드는 추상 메서드 ParentClass::bar()를 호출할 수 없음을 나타내는 치명적인 오류를 생성합니다.
경고의 정당성
이러한 제한 사항에 따라 , PHP 5.2에서는 추상 정적 메소드 사용을 금지하는 경고를 정당하게 발행했습니다. 실용적인 목적을 제공하지 않았기 때문에 오해로 인해 사용되었을 가능성이 높으며 잘못된 코드로 간주되었습니다.
오해가 해결되었습니다
PHP 5.3에서는 후기 정적 바인딩을 도입했습니다. 부모 클래스의 메서드가 자식 클래스의 정적 메서드에 액세스할 수 있도록 허용합니다. 이 추가로 인해 추상 정적 메서드를 금지하는 근거가 덜 설득력 있게 되었습니다. 그러나 손상된 정적 메서드를 노출하는 것이 문제가 될 수 있다는 미약한 주장으로 인해 경고가 계속 표시되었습니다.
오류와 해결 방법
안타깝게도 Rasmus Lerdorf의 오해, PHP 창시자는 경고 제거를 옹호하는 버그 보고서를 실수로 닫았습니다. 그 후, 확실한 근거가 없음에도 불구하고 경고는 그대로 유지되었습니다.
추상 정적 메서드의 미래
다행히도 PHP 7에서는 마침내 경고가 제거되었습니다. RFC에서 제안됨: E_STRICT 통지를 재분류합니다. 이를 폐지함으로써 개발자는 허위 경고가 발생하지 않고 추상 정적 메서드를 다시 한 번 활용할 수 있습니다.
위 내용은 PHP 5.2에서 추상 정적 클래스 메서드가 폐지된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!