PHP의 메서드 매개변수 재정의: 엄격한 표준 위반
객체 지향 프로그래밍에서 Liskov 대체 원칙(LSP)은 다음을 나타냅니다. 하위 유형의 개체는 프로그램의 동작을 변경하지 않고 상위 개체를 대체할 수 있습니다. 그러나 PHP에서는 다른 매개변수 서명으로 메서드를 재정의하는 것은 엄격한 표준을 위반하는 것으로 간주됩니다.
이것이 위반인 이유는 무엇입니까?
PHP는 약한 형식의 메서드입니다. 이는 컴파일러가 컴파일 타임에 변수의 정확한 유형을 결정할 수 없음을 의미합니다. 즉, 하위 클래스가 상위 클래스 메서드를 재정의하면 컴파일러는 새 서명이 원본과 호환되는지 확인할 수 없습니다.
결과적으로 컴파일러는 엄격한 표준 경고를 발행하여 다음과 같은 잠재적인 문제를 표시합니다. 프로그램이 중단될 수 있습니다.
다음 예를 고려하세요.
class Foo
{
public function bar(array $bar) {}
}
class Baz extends Foo
{
public function bar($bar) {}
}
이 코드에서 Baz::bar() 메서드는 Foo::bar() 메서드를 다른 서명으로 재정의합니다. 컴파일러는 새 서명이 원본과 호환되는지 확인할 수 없으므로 잠재적으로 문제가 발생할 수 있습니다.
메서드 매개변수 재정의에 대한 대안
다른 서명으로 메서드를 재정의하는 대신 서명의 경우 원하는 기능을 달성하기 위한 대체 접근 방식이 있습니다.
이러한 대안을 따르면 엄격한 표준 위반을 방지하면서도 목표를 달성할 수 있습니다. PHP 애플리케이션에서 원하는 기능을 선택하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3