2011-01-26 6 views
1

나는 더 심각한 OOP (이전에는 상속을 사용)에 발가락을 담글 았고 나는 혼란스러워하는 것을 발견했습니다.하위 클래스가 인터페이스를 구현하는 것이 괜찮습니까?

데이터베이스 연결을 처리하는 수퍼 클래스가 있습니다.

은 내가 다르지만 유사한 기능이 공존 할 수 있도록 전략 패턴을 사용하고자하는 사이트의 회원 기능

에 관련된 연결을 처리하는 서브 클래스가 있습니다. 예를 들어 :

  • 는 데이터베이스에 연결하고 새로운 등록을 위해 데이터베이스에
  • 연결 이름 및 이메일을 확인하고 등록 확인을 위해 사용자 이름과 확인 코드를 확인
  • 는 데이터베이스에 연결하고 로그인
  • 에 대한 사용자 이름과 암호를 확인
+0

나는 이것에 대해 생각해 보지 못했지만, –

+1

질문 제목이 귀하의 질문 본문과 무관하다는 것을 알기를 바랍니다. – Gordon

답변

2

PHP에서 수퍼 클래스를 확장 할 수 있습니까? 예, 추상 클래스는 PHP에서 슈퍼 클래스를 확장 할 수 있습니다

class A {} 
abstract class B extends A {} 
class C extends B {} 

var_dump(new C); 

object(C)#1 (0) {} 

그래서 대답은 제공합니다. 제목 업데이트 후

편집 : 서브 클래스가 인터페이스를 구현하는

예, 그것은 완벽하게 괜찮습니다. 그러나 전략의 맥락에서 이 추상화를 캡처하고 파생 클래스에 구현 세부 정보를 포함하는 인터페이스가 아닌 다른 인터페이스에서 메소드를 호출하지 않을 가능성이 높습니다. http://sourcemaking.com/design_patterns/strategy

0

코드를 모르면 대답하기가 어렵습니다. 귀하의 질문에서 파생 될 수있는 것으로부터, 저는이 경우 상속 대신에 구성을 사용해야한다고 말하고 싶습니다.

특정 문제 도메인과 관련된 쿼리를 만들기 위해 데이터베이스 연결을 통합하는 다양한 "서비스 클래스"를 가질 수 있습니다. 그들은 모두 쿼리를 만들기 위해 사용할 수있는 속성이 $dbConnection입니다. 의존성 주입을 사용하여 setter 메소드 (setDbConnection($dbConnection))를 사용하여 외부에서 해당 속성을 설정하거나 다양한 서비스 객체의 생성자에서 직접 매개 변수로 전달합니다.

+0

전략 패러다임 내에서이 인터페이스를 사용하겠습니까? 그렇지 않습니다. –

+0

전체 페이지 요청에 대해 한 번만 데이터베이스에 연결하는 것이 이상적입니다. 전략 패러다임에 대해서는 잘 모르겠지만 setDbConnection 메소드를 하위 클래스의 인스턴스에서 사용할 수있는 추상 기본 클래스에 추가 할 수 있습니다. 또는 dbConnection을 매개 변수로 허용하도록 추상 클래스의 생성자를 설정할 수 있습니다. – Srisa

관련 문제