2013-12-11 3 views
1

이것이 가능한지 확실하지 않지만 여기에 나와 있습니다. 자식 클래스 내에서 보호 된 변수의 값을 설정 한 다음 부모 클래스에서 해당 값에 액세스하려고합니다.하위 클래스의 보호 된 변수 값 설정 및 상위의 값 액세스

Child Value: set value 
Parent Value: set value 

것은 내가 얻을 그러나 대신 다음 :

Child Value: set value 
Parent Value: 

는인가

class A { 
    protected $a; 

    public function __construct() { 
     new B; 

     echo "Parent Value: {$this->a}"; 
    } 

    protected function setter($value) { 
     $this->a = $value; 
    } 
} 

class B extends A { 
    public function __construct() { 
     $this->setter('set value'); 

     echo "Child Value: {$this->a}<br />"; 
    } 
} 


new A; 

내가 수 위의 코드에 대한 출력을 기대 해요 : 이것은 내가 시도 것입니다 하위 클래스 내에서 보호 된 변수의 값을 설정 한 다음 상위 클래스의 해당 값에 액세스 할 수 있습니까? 내가 어떻게 이것을 성취 할 수 있겠습니까?

답변

1

B -class 객체를 A -class 생성자로 생성 할 때 값을 설정하고 하위 클래스에서 액세스 할 수 있지만 실제로 코드에 문제가있는 것은 부모 객체를 생성하고 그 부모 객체의 생성자에서 자식 클래스의 새 객체를 생성합니다.

은 그래서 일어나고있는 것은 :

  • 당신은 A 객체의 A 클래스 실행의 생성자를 생성;
  • 생성자에서 B 개체를 생성합니다. 이것은 현재 A 개체와 관련이없는 새로운 개체입니다.
  • B 객체의 생성자는 값을 설정하고 기본적으로 사용자 자신의 질문에 답합니다. 출력의 첫 번째 줄은 예상대로입니다.
  • A 개체의 생성자에서 계속 생성 된 B -class 개체를 무시하고 $this->a 값을 반향하지만 그 값은 해당 개체에 설정되어 있지 않으므로 아무 것도 얻지 못합니다.

부모 생성자에서 하위 개체를 생성하려는 이유가 혼란 스럽습니다. 일반적으로 B 개체를 생성하고 해당 개체의 생성자에서 먼저 B 특정 작업을 수행하기 전에 부모 생성자를 호출합니다.

+0

저는 방금 OOP의 개념을 배우고 있습니다. 내가 다른 방식으로하려는 일을 성취하는 것이 가능 할까? –

+0

@MeisamMulla 정확히 무엇을 성취하려고합니까? 이미 설정을 완료하고 하위 클래스에서 상위 클래스의 변수를 사용하고 있음을 유의하십시오. – jeroen

+0

자식 클래스에서'$ a'의 값을 설정하고 부모로부터 같은 값에 접근하고 싶습니다. 왜, 나는 단지 몇 가지 개념으로 놀고있다. –