2013-06-02 5 views
0

나는 하나의 작은 질문이있다. 이유를 (자식 클래스에 정의 된 현재의 방법으로 부모 방법 (개인 방법)에 다른 하나의 예를 들어 포인트 $이 참조

class Bar 
{ 
    public function test() { 
     $this->testPrivate(); 
     $this->testPublic(); 
    } 

    public function testPublic() { 
     echo "Bar::testPublic\n"; 
    } 

    private function testPrivate() { 
     echo "Bar::testPrivate\n"; 
    } 
} 

class Foo extends Bar 
{ 
    public function testPublic() { 
     echo "Foo::testPublic\n"; 
    } 

    private function testPrivate() { 
     echo "Foo::testPrivate\n"; 
    } 
} 

$myFoo = new foo(); 
$myFoo->test(); // Bar::testPrivate 
      // Foo::testPublic 

이 사람은 간단한 방법으로 설명 할 수 : PHP 매뉴얼 사이트에 하나의 예가 공공의)? 그것은 나를 위해 논리적이 아니에요, 나는 경우 또는 두 경우 모두 부모 메서드에 자식 클래스 메서드를 가리 키도록 기대할 수 있을까요?

도와주세요!

+0

두 번째 예제를 붙이지 않았다. – pinkpanther

+0

인데, 왜냐하면'testPrivate'가 자식 클래스에서 오버라이드되고'$ myFoo' 객체가'Bar' 클래스에서'testPrivate'에 접근하지 않기 때문입니다. – smoqadam

+0

두 가지 방법 모두 오버라이드됩니다. 그것은 나를 위해 명확하지 때까지 ... – jrj

답변

1

public 또는 protected이면 하위 클래스는 부모 메서드에만 액세스 할 수 있지만 private은 액세스 할 수 없기 때문입니다. 그래서 자신의 개인 방법에 리조트.

항상 현재 클래스의 메서드를 호출하려는 경우 $this-> 대신 self::을 사용하십시오.

+0

hmmm .... 연산자 self ::는 상수 및 정적 멤버에 사용되는 클래스 연산자입니다. 하위 클래스에서 두 가지 오버라이드 된 메소드에 모두 액세스 할 것으로 예상되기 때문에 여전히 나에게 불분명하다. superClass와 public 클래스를 private로 만듭니다. 어쩌면 이것이 적절한 행동입니까 ?? – jrj

+0

'self ::'도 메서드에 사용할 수 있습니다. 시도 해봐! – silkfire

+0

나는 조금 놀고 있었는데 범위라고 생각합니다. # this #를 private # member # (함수 또는 속성)과 조합하여 사용하는 메소드이며 상속됩니다. somekind는 여전히 SUPER 클래스의 멤버로 취급되며 SUBclasses의 private 멤버에 액세스 할 수 없습니다! 반면에 그것은 공개 및 보호 된 구성원을 액세스 할 수 있습니다. 그것은 서브 클래스의 private 멤버에 접근 할 수 있기 때문에 여전히 슈퍼 클래스의 private 멤버를 가리 킵니다. 만약 내가 자기를 사용한다면 : : 항상 슈퍼 클래스에 evelute! – jrj