"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP에서 메서드 매개변수를 재정의하는 것이 엄격한 표준을 위반하는 이유는 무엇입니까?

PHP에서 메서드 매개변수를 재정의하는 것이 엄격한 표준을 위반하는 이유는 무엇입니까?

2024-11-06에 게시됨
검색:811

Why Does Overriding Method Parameters in PHP Violate Strict Standards?

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 애플리케이션에서 원하는 기능을 선택하세요.

릴리스 선언문 이 글은 1729202656에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3