> 백엔드 개발 > PHP 튜토리얼 > PHP 5.2에서 추상 정적 클래스 메서드가 폐지된 이유는 무엇입니까?

PHP 5.2에서 추상 정적 클래스 메서드가 폐지된 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-12 04:26:01
원래의
369명이 탐색했습니다.

Why Were Abstract Static Class Methods Abolished in PHP 5.2 ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿