>  기사  >  백엔드 개발  >  PHP Liskov 대체 사례에 대한 자세한 설명

PHP Liskov 대체 사례에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-17 10:38:081506검색

이번에는 PHP Richter 교체 사례에 대해 자세히 설명하겠습니다. PHP Richter 교체 시 주의 사항은 무엇인가요? 다음은 실제 사례입니다.

Liskov 대체 원칙

Liskov 대체 원칙은 소프트웨어에서 기본 클래스 객체를 해당 하위 클래스 객체로 대체하면 프로그램이 오류나 예외를 생성하지 않는다는 것을 나타냅니다. 소프트웨어 엔터티가 하위 클래스 개체를 사용하더라도 반드시 기본 클래스 개체를 사용하지 못할 수도 있습니다. Liskov 대체 원칙은 열기 및 닫기 원칙을 구현하는 중요한 방법 중 하나입니다. 하위 클래스 개체는 기본 클래스 개체가 사용되는 모든 곳에서 사용할 수 있으므로 기본 클래스 유형을 사용하여 프로그램에서 개체를 정의하고 런타임에 결정해 보세요. . 해당 하위 클래스 유형은 상위 클래스 객체를 하위 클래스 객체로 대체합니다.

리스코프 대체 원칙을 사용할 때 하위 클래스의 모든 메서드는 상위 클래스에서 선언되어야 하며, 그렇지 않으면 하위 클래스는 상위 클래스에서 선언된 모든 메서드를 구현해야 한다는 점에 유의하세요. 부모 클래스를 추상 클래스나 인터페이스로 디자인하고, 하위 클래스가 상위 클래스를 상속받거나 상위 인터페이스를 구현하도록 하고, 상위 클래스에 선언된 메서드를 구현하도록 하세요. 런타임 시 하위 클래스 인스턴스가 상위 클래스 인스턴스를 대체합니다. 시스템 기능을 쉽게 확장할 수 있으며 원래 하위 클래스의 코드를 수정할 필요가 없습니다. 새 하위 클래스를 추가하면 새 기능을 추가할 수 있습니다.

코드를 통해 이해하기

<?php
//例子1
class Bird{
  protect function fly(){
  }
}
//翠鸟
class KingFisher extends Bird{
}
//鸵鸟
class Ostrich extends Bird{
  //鸵鸟不会飞啊
}
//例子2
class A{
  protect function add($a, $b){
    return $a + $b;
  }
} 
//重载
class B extends A{
  protected function add($a, $b){
    return $a + $b + 100;
  }
}
?>

리스코프 대체 원칙은 클래스 상속에 대한 제약입니다. Liskov 대체 원칙에는 두 가지 이해가 있습니다.

1. 중복된 메서드나 속성이 있는 부적절한 클래스를 상속할 수는 없습니다. (예제 1)

2. 하위 클래스는 상위 클래스의 기능을 확장할 수 있지만 상위 클래스의 원래 기능을 변경할 수는 없습니다. (예시 2)

리히터 대체 원리에는 다음과 같은 숨겨진 의미가 있습니다.

① 하위 클래스는 상위 클래스의 추상 메서드를 구현할 수 있지만 상위 클래스의 비추상 메서드를 재정의할 수는 없습니다.

② 서브클래스는 고유한 메서드를 추가할 수 있습니다.

3 하위 클래스의 메서드가 상위 클래스의 메서드를 재정의하는 경우 메서드의 전제 조건(즉, 메서드의 형식 매개변수)은 상위 클래스 메서드의 입력 매개변수보다 느슨합니다.

4 하위 클래스의 메서드가 상위 클래스의 추상 메서드를 구현할 때 메서드의 사후 조건(즉, 메서드의 반환 값)은 상위 클래스의 사후 조건보다 더 엄격합니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

PHP 캐싱 도구 XCache 설치 및 사용 사례 분석

PHP가 동시 반복 쓰기를 방지하는 방법

위 내용은 PHP Liskov 대체 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.