2012-05-16 4 views
2

나는 PHP OOP에 조금 익숙하다. 그래서 너희들이 여기서 도움을 필요로한다. 추상 클래스 내에서 추상 함수를 사용해야하는 시점을 이해하려고합니다. 예를간단한 추상 클래스 개념

abstract class User{ 
    abstract function login(); 
    //how do I decide if I should make login function as abstract or regular function.    
    abstract function permission(); 

    function AccountCredit(){ 
     echo 'show account credits'; 
    } 

} 

답변

2

추상 클래스는 클래스가 "Beagle"및 "Terrier"인 것처럼 실제 생성 (인스턴스화)하지 않는 클래스입니다. "개"는 실제로 의미가 없습니다.

"개"가 아닌 "비글"과 "테리어"에만 색상과 헤어 스타일이 적용됩니다. 맞습니까? 그래서 개 레벨에서 추상적 일 것입니다.

단일 품종에만 적용되는 모든 방법은 "개"에 전혀 존재하지 않습니다.

numberOfLegs는 "Dog"수준 (추상적이지 않음)에서 구현되어 어린이가 상속 할 수 있습니다 (아무 것도 말하지 않음).

실제 개를 인스턴스화하는 경우 품종이 추상화됩니다. 실제 개를 인스턴스화하는 경우 사고가 발생한 개별 개를 설명하기 위해 numberOfLegs를 무시해야 할 수도 있습니다.

그러나 OO를 처음 사용하는 경우 제안 할 수 있습니까? 모든 상속을 최소한으로 유지하십시오. 실제로 강제 할 때만하십시오. 좋은 프로그래머가 OO를 처음으로 생각할 때 모든 것을 하나의 거대한 오브젝트 트리에 연결하는 것입니다. 이것은 잘 작동하지 않는 것으로 나타났습니다. 거의 모든 시간을 확장하는 대신 캡슐화를 사용하는 것이 좋습니다.

+0

매우 명확합니다. 많은 감사합니다. – Rouge

1

에 대한

당신은 그들이 원하는 경우 모든 서브 클래스가 선택하는 경우에 사용하거나 대체 할 수 있습니다 아무 분별 기본 동작이 존재하지 않는 경우는 방법이 추상적합니다.

1

클래스 내에서 추상적 기능을 정의하면 (추상이라고 선언해야 함)이 추상 클래스를 확장하는 클래스 내에서이 기능을 구현해야 함을 의미합니다.

기능이 매우 다르거 나 추상 클래스를 확장하는 클래스에 따라 달라지는 경우 추상 함수를 정의 할 수 있습니다.

1

로그인 기능이 모든 사용자에게 동일하게 적용됩니까? 그렇다면 가능한 한 낮은 수준 (이 추상 클래스에서)으로 구현되어야합니다.

각기 다른 로그인 기능이 필요한 여러 유형의 사용자가있을 경우이를 추상적으로두고 구현하는 각 수퍼 클래스에서 각 유형의 사용자의 필요에 따라 다르게 구현하십시오.

0

추상 클래스는 추상 클래스와 추상 클래스에서 상속 한 모든 클래스 간의 계약입니다.

추상 클래스와 인터페이스 간의 차이점은 인터페이스가 메서드의 서명 만 인터페이스를 구현하지 않는다는 점입니다.

추상 클래스에서 상속하는 경우 모든 추상 메서드를 구현해야합니다. 나머지 모든 추상적 인 메소드는 상속받을 것이고 나머지는 일반적인 클래스에서 어떻게 확장 할 것인가