2012-10-25 4 views
2

의가 난 단지 SomeClass를 확장하지만, BaseClass로에서 아무것도 얻을 수 없습니다 2 개 클래스 하나의 부모 만 확장하는 방법은 무엇입니까?

class BaseClass { 
    ... 
} 

class SomeClass extends BaseClass { 

} 

지금은 세 번째 클래스를 생성 할

을 가지고 있다고 가정 해 봅시다. 그게 가능한가?

나는, 우리 도서관

+1

상속 그래프가 깨진 것처럼 들릴 수 있기 때문에 "전체 프레임 워크, 일부 라이브러리 만로드하려고하지 마십시오"를 명확히 할 수 있습니까? – Gordon

+0

[* traits *] (http://php.net/traits)를 사용하면 클래스 기반 포함 (원하는 내용 일 수도 있음)이 가능합니다. 자신의 케이스에서 의미가 있는지는 모르지만 직접 찾고있는 것은 PHP에는 존재하지 않습니다. – hakre

답변

6

당신은 할 수 없습니다 단지 일부를 webdriver와 셀레늄 테스트를 작성하고 DB 또는 웹 서비스에 대한 셀레늄의 데이터를 확인하고자하지만, 전체 프레임 워크를로드하지 않을거야. 그것은 상속이 작동하는 방식이 아닙니다. SomeClass에서 상속받은 클래스는 BaseClass에서 상속받은 SomeClass의 속성 및 메서드를 비롯하여 모든 속성과 메서드를 상속합니다. 공개 설정을 통해 비공개에서 공개로만 액세스를 제한 할 수 있습니다. 시야를 느슨하게 할 수는 있지만 조이지는 않습니다.

은 상속 및 가시성에 대한 PHP 설명서의 장을 참조하십시오 :


또 다른 옵션의 인스턴스 주위 외관의 일종을 사용하는 것입니다 SomeClass는 SomeClass에서 액세스 할 수있는 속성 및 메서드에 대한 액세스를 제어합니다 (예 : 당신의 SomeClass를 가정하는 것은 BaseClass로에서 메소드 foo는()와 상속 바()를 가지고, 당신은

class LimitedAccess 
{ 
    private $instance; 

    public function __construct(SomeClass $someClass) 
    { 
      $this->instance = $someClass 
    } 

    public function foo() 
    { 
     return $this->instance->foo; 
    } 
} 

을 할 수있는 한 다음 BaseClass로 :: 줄이 외관을 효과적으로 방지 액세스를 통해 모든 액세스를 깔때기 수 있습니다(). 이것은 어떤 식 으로든 상속 계층 구조를 변경하지 않는다는 점에 유의하십시오. 단지 액세스를 제어합니다.

+0

상속이 어떻게 작동하는지 알고 있습니다. 상속을 중단 할 수있는 방법이 있기를 바랍니다. 고맙습니다. –

2

생각에 대한 당신의 어머니가 그녀는 당신은 ..

같은 PHP

에서

당신의 할머니의 손자없이 어머니의 아들 어차피 ... 을 어머니가 인간 ... 로 클래스 ... 그의 아이의가는 요리 기타를 확장 할 때

0

당신 확실히 할 수있는 당신은 Third 클래스에서 호출 할 수 제한 할 BaseClass ..

0123의 방법에 PROTECTED 액세스 한정자를 넣어 경우
+1

하지만 SomeClass가 해당 메소드에 액세스하도록 제한합니다. –

+0

@TomasJancik : 아니요. 당신의 SomeClass는 이미 Protected 수식어가 접두어로 붙은 함수에 접근하기위한 기준을 충족시키는 BaseClass를 상속 받고 있습니다 .. –

+0

@RahulRanjan Base에서 보호되는 것이 있다면 하위 클래스에서 보호 될 것이므로 Foo 확장형 Bar를 확장하면 Base의 모든 보호 된 멤버도 가질 수 있습니다 . – Gordon

관련 문제