PHP 5.2에서 정적 추상 메소드가 허용되지 않는 이유는 무엇이며 이후 버전에서는 무엇이 변경되었습니까?

Susan Sarandon
풀어 주다: 2024-11-14 12:57:02
원래의
945명이 탐색했습니다.

Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

PHP 5.2에서 정적 추상 메소드가 허용되지 않는 이유

PHP 5.2에서는 엄격한 경고가 도입되면서 관련 표준 경고가 급증했습니다. 정적 클래스 메서드를 추상화합니다. 이 변경으로 인해 PHP는 왜 추상 정적 함수를 허용하면 안 되는가?

금지의 이유

처음에는 PHP 5.2에서 추상 정적 메서드를 금지했습니다. 이는 늦은 정적 바인딩이 없기 때문이었습니다. 당시에는 다음과 같은 코드가 예상대로 작동하지 않습니다.

abstract class ParentClass {
    static function foo() {
        echo "I'm gonna do bar()";
        self::bar();
    }

    abstract static function bar();
}

class ChildClass extends ParentClass {
    static function bar() {
        echo "Hello, World!";
    }
}

ChildClass::foo();
로그인 후 복사

자식 클래스의 메서드로 호출되는 경우에도 self::bar() 호출은 bar() 메서드를 참조합니다. ParentClass의 늦은 정적 바인딩이 없으면 이러한 제한으로 인해 추상 정적 메서드가 본질적으로 쓸모 없게 됩니다.

늦은 정적 바인딩 추가

PHP 5.3이 도입되면서 static 키워드는 메서드를 허용했습니다. 부모 클래스에서 자식 클래스의 정적 메서드를 호출합니다. 이로 인해 추상 정적 메서드를 합리적으로 사용할 수 있는 문이 열렸습니다. 후기 정적 바인딩은 이전 제한 사항을 해결하고 정적 추상 메서드를 실현 가능하게 만들었습니다.

결함 있는 이론적 근거

후기 정적 바인딩이 도입되었음에도 불구하고 추상 정적 함수에 대한 경고는 계속되었습니다. . 제시된 주장은 ParentClass::foo()를 호출하면 손상된 ParentClass::bar() 메서드가 노출될 수 있다는 것입니다. 그러나 이 문제는 추상 클래스가 인스턴스화되지 않도록 함으로써 해결될 수 있습니다.

잘못된 결정

잘못된 근거에도 불구하고 PHP에는 경고가 남아 있었습니다. 제거를 요구하는 PHP 버그 보고서가 "가짜"로 잘못 종료되었습니다. 이러한 잘못된 결정으로 인해 경고가 계속 표시되어 개발자들은 좌절감을 느꼈습니다.

정적 추상 메서드의 미래

다행히도 경고는 제거될 예정입니다. 이 변경으로 인해 PHP는 최신 객체 지향 프로그래밍 방식에 맞춰지고 개발자는 불필요한 경고 없이 추상 정적 메서드를 활용할 수 있게 됩니다. 개발자는 더 이상 PHP 5.2의 잘못된 결정으로 인한 혼란을 겪을 필요가 없습니다.

위 내용은 PHP 5.2에서 정적 추상 메소드가 허용되지 않는 이유는 무엇이며 이후 버전에서는 무엇이 변경되었습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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