의가 난 단지 SomeClass를 확장하지만, BaseClass로에서 아무것도 얻을 수 없습니다 2 개 클래스 하나의 부모 만 확장하는 방법은 무엇입니까?
class BaseClass {
...
}
class SomeClass extends BaseClass {
}
지금은 세 번째 클래스를 생성 할
을 가지고 있다고 가정 해 봅시다. 그게 가능한가?나는, 우리 도서관
의가 난 단지 SomeClass를 확장하지만, BaseClass로에서 아무것도 얻을 수 없습니다 2 개 클래스 하나의 부모 만 확장하는 방법은 무엇입니까?
class BaseClass {
...
}
class SomeClass extends BaseClass {
}
지금은 세 번째 클래스를 생성 할
을 가지고 있다고 가정 해 봅시다. 그게 가능한가?나는, 우리 도서관
당신은 할 수 없습니다 단지 일부를 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로 :: 줄이 외관을 효과적으로 방지 액세스를 통해 모든 액세스를 깔때기 수 있습니다(). 이것은 어떤 식 으로든 상속 계층 구조를 변경하지 않는다는 점에 유의하십시오. 단지 액세스를 제어합니다.
상속이 어떻게 작동하는지 알고 있습니다. 상속을 중단 할 수있는 방법이 있기를 바랍니다. 고맙습니다. –
생각에 대한 당신의 어머니가 그녀는 당신은 ..
같은 PHP
에서당신의 할머니의 손자없이 어머니의 아들 어차피 ... 을 어머니가 인간 ... 로 클래스 ... 그의 아이의가는 요리 기타를 확장 할 때
당신 확실히 할 수있는 당신은 Third
클래스에서 호출 할 수 제한 할 BaseClass
..
PROTECTED
액세스 한정자를 넣어 경우
하지만 SomeClass가 해당 메소드에 액세스하도록 제한합니다. –
@TomasJancik : 아니요. 당신의 SomeClass는 이미 Protected 수식어가 접두어로 붙은 함수에 접근하기위한 기준을 충족시키는 BaseClass를 상속 받고 있습니다 .. –
@RahulRanjan Base에서 보호되는 것이 있다면 하위 클래스에서 보호 될 것이므로 Foo 확장형 Bar를 확장하면 Base의 모든 보호 된 멤버도 가질 수 있습니다 . – Gordon
상속 그래프가 깨진 것처럼 들릴 수 있기 때문에 "전체 프레임 워크, 일부 라이브러리 만로드하려고하지 마십시오"를 명확히 할 수 있습니까? – Gordon
[* traits *] (http://php.net/traits)를 사용하면 클래스 기반 포함 (원하는 내용 일 수도 있음)이 가능합니다. 자신의 케이스에서 의미가 있는지는 모르지만 직접 찾고있는 것은 PHP에는 존재하지 않습니다. – hakre