2012-04-04 3 views
0
class config { 
    public $pageName; 

    function __construct($pageName=''){ 
     $this->pageName = $pageName;   
    } 
} 


class header extends config { 
    function display(){ 
     echo parent::$this->pageName; 
    } 

} 


$config = new config('Home Page'); 
$header = new header(); 
$header->display(); 

아무 것도 표시되지 않고 '홈 페이지'가 표시되어야한다고 생각했습니다.PHP에서 부모 클래스의 변수 값을 얻으려면 어떻게해야합니까?

어떻게하면 될까요?

+0

을 그냥 '에코 $ this-> 페이지 이름 만 할 수있는; ' – Sachin

+0

+1 설명되지 않은 downvote 반대. – ArjunShankar

답변

4

$header 개체는 $config 개체와 관계가 없습니다. 클래스 계층 구조가 연결되어 있다고해서 개체 인스턴스이 데이터를 공유한다는 의미는 아닙니다. 그것은 다른 객체이기 때문에

$config1 = new config('Home Page'); 
$config2 = new config(); 

여기 $config2은 어느 값 'Home Page'에 액세스 할 수 없습니다. 그것은 계급 계층의 문제가 아닙니다.

+0

귀하의 설명이 정확한 이유는 정확하지만 예상되는 (OP를 기준으로) 결과를 얻는 방법을 조언 해 줄 수 있다면 좋을 것입니다. – knittl

+0

OP가 기대하는 것이별로 의미가 없기 때문에 나는 할 수 없다. 그가 코드에서 보여주는 것을 달성하기를 원한다면 정적 클래스 속성을 사용해야 할 것입니다. 정적 속성은 문제에 대한 올바른 해결책이 아닐 수 있습니다. – deceze

+0

생성자를 상속하는 방법이나 IoC가 있습니다. – knittl

1
당신은 당신의 객체를 구성하는 대신 수업 (제어 일명 반전 의존성 삽입 (Dependency Injection)) 상속 할

:

interface IConfig { 
    public function pageName(); 
} 
class Config implements IConfig { 
    private $pageName; 
    public function pageName() { return $this->pageName; } 

    function __construct($pageName=''){ 
     $this->pageName = $pageName;   
    } 
} 


class Header { 
    private $config; 

    function __construct(IConfig $config) { 
     $this->config = $config; 
    } 

    function display(){ 
     echo $this->config->pageName(); 
    } 

} 


$config = new Config('Home Page'); 
$header = new Header($config); 
$header->display(); 
1
$header = new header('Home Page'); 
$header->display(); 
+0

사실, 당신이 그것을 무시하지 않는다면 * 될 것입니다. 생성자는 나머지처럼 * 상속받습니다. – deceze

+0

꽤 맞다, 수정했다 – cloakedninjas

0
$header = new header('Home Page'); 
$header->display(); 
+0

단지 부모 생성자를 호출하기 위해'header' 클래스에 생성자를 선언 할 필요가 없다. 그냥 모든 것을 버려두면 생성자는 다른 모든 것처럼 상속됩니다. – deceze

+0

네 말이 맞다! :-) –

관련 문제