2015-02-06 4 views
-4

사람은 사전에 php.Thanks의 주요 장점 및 상속/멀티 레벨 상속의 단점이 무엇인지 말해 줄 수 :장점과 PHP에서 상속의 단점

+0

http://php.net/manual/en/language.oop5.inheritance.php – user3647254

+0

내 대답을 왜곡시키는 이유는 무엇입니까? – Priyank

+0

당신의 대답이나 질문. (나는 당신의 대답을 downvoted하지 않았다) – user3647254

답변

2

장점 : -

하나 상속의 주요 장점 중 하나는 여러 하위 클래스간에 공통 코드를 공유하여 응용 프로그램의 중복 코드 양을 최소화하는 것입니다. 동일한 코드가 두 개의 관련 클래스에 존재하는 경우 계층 구조는 일반적으로 공통 코드를 상호 수퍼 클래스로 이동하도록 리팩터링 될 수 있습니다. 이것은 또한 코드와 더 작고 단순한 컴파일 단위의 더 나은 조직을 만들어내는 경향이 있습니다.

상속을 사용하면 공통 수퍼 클래스에서 상속 한 클래스를 서로 바꾸어 사용할 수 있으므로 응용 프로그램 코드의 변경이보다 유연 해집니다. 파생 클래스 데이터 숨어의 비즈니스 로직에 따라 기본 클래스의 논리를 확장 - 같은 확장 성을 다시 작성하지 않고 기본 클래스의 public 메소드를 사용하는 시설 - 메소드의 반환 형식은

재사용은 슈퍼 클래스 인 경우 - 기본 클래스는 파생 클래스에 의해 변경 될 수 없도록 일부 데이터를 비공개로 유지할 수 있습니다.

재정의 - 상속을 통해 기본 클래스의 메서드를 재정의 할 수 있으므로 기본 클래스 메서드의 의미있는 구현 파생 클래스에서 설계 될 수 있습니다.

단점 : - 상속의 주요 단점

  1. 하나는 오버로드 된 클래스의 모든 단계를 통해 이동하도록 프로그램을 걸리는 시간이 증가/노력입니다. 주어진 클래스가 그 위에 추상화 수준이 10 개 있다면, 기본적으로 각 클래스에 정의 된 함수를 실행하기 위해 10 번의 점프가 수행됩니다.

  2. 상속을 사용하는 데있어서의 주요 단점은 두 클래스 (기본 클래스와 상속 된 클래스) 단단히 결합. 이것은 서로 독립적으로 사용할 수 없음을 의미합니다.

  3. 또한 유지 보수 중에 새로운 기능을 추가 할 때 기본 클래스와 파생 클래스를 모두 변경해야합니다. 메소드 서명이 변경되면 두 경우 모두 영향을받습니다 (상속 & 구성)

  4. 메소드가 "수퍼 클래스"또는 집계에서 삭제 된 경우, 사용시 재계약해야합니다 그 방법은. 우리 프로그램이 여전히 컴파일 될 것이기 때문에 상황이 조금 복잡해질 수 있지만 서브 클래스의 메소드는 더 이상 수퍼 클래스 메소드를 오버라이드하지 않습니다. 이러한 방법은 독자적인 방법이 될 것입니다.

1

이 유형의 질문에 적합한 사이트인지는 확실하지만 괜찮습니다.

다른 모든 클래스가 확장하는 기본 클래스 Base이 있다고 가정 해 보겠습니다. 기본 클래스에서는 다른 모든 클래스에서 사용할 수있는 항목을 정의 할 수 있습니다 (예 : mysqli에 대한 연결이므로 모든 클래스는 $this->mysqli을 사용할 수 있으며 선언 할 필요가 없습니다.

전자 상거래 CMS를 만들었는데, 여기에서이 방법을 사용합니다.또한 getLink()이라는 메서드를 정의하여 메서드가 getUrl()getTitle()인지 확인합니다. 이러한 메서드는 모든 자식 클래스 (내 CMS Product, Category ...)에서 정의됩니다. Product 클래스를 사용하고, getUrl()getTitle() 메서드도 있지만 Product이 확장되는 getLink() 메서드는 Base에 있습니다. 거의 모든 곳에서 getLink() 메서드를 사용하므로 모든 클래스에 쓰지 않으려면 Base에 쓰고 사용할 수 있습니다.

내 CMS의 다른 예 : Base 구문에서 이름이 global_update 인 입력이 제출되었는지 확인합니다. $this->table$this->id이 정의되었는지 확인하고, 그렇다면 데이터로 데이터베이스를 업데이트합니다. 그렇지 않으면 모든 업데이트 작업에 대한 처리기를 정의해야합니다. 이 방법으로 모든 클래스에 대해 하나의 전역을 가지며 더 복잡한 형식에 대해서만 자체 처리기를 작성합니다.

나는 이해할 수 있기를 바랍니다. 그렇지 않다면 의견을 말하고 질문하십시오.