2011-12-31 3 views
1

Child 클래스에서 "$ this-> lang"이라는 부모 속성에 액세스하여 부모를 호출하기 전에 다른 속성에 사용해야합니다 같은 다시 생성자 :parent :: __ construct를 사용하기 전에 자식 클래스의 부모 클래스 속성에 액세스하십시오.

abstract class mySuperClass { 

    protected $lang; 

    public function __construct($arg1=null, $arg2=null, $arg3=null) { 
     $this->lang = "US"; 
    } 
} 

class myChild extends mySuperClass { 

    public function __construct($arg1=null, $arg2=null, $arg3=null) { 
     $new_arg1 = $this->lang; // HERE WE ARE STRUGGLYING ... 
     echo "<br/>step 1) ". get_class(). " : lang= $new_arg1 "; // returns "" where I would need "US" 
     parent::__construct($new_arg1 , $arg2, $arg3) ; 
     echo "<br/>step 2) ". get_class(). " : lang= $this->lang"; // returns "US" 

    } 
} 

$obj = new myChild("foo1", "foo2", "foo3") ; 

부모 클래스는 우리가 부모 속성 $ this-> LANG를 호출하려고하는이 단계에서 통해 인스턴스되지 않는이 가능/허용 보이지 않는다. 어느 것이 논리적으로 보입니다.

그래서 질문은 :
자식 클래스의 부모 속성에 액세스하는 방법이 있습니까? 표시된대로 생성자를 재정의 할 수 있습니까?

답변

2

어쨌든 (하드 코드 된 문자열을 사용하여) 이러한 속성을 정적으로 설정하는 경우 정적 속성 (심지어 클래스 상수 일 수도 있음)으로 설정하십시오 (기본값). 그런 다음 부모의 정적 var를 자식 생성자 (부모의 경우도)에서 참조하십시오.

abstract class mySuperClass { 
    static protected $default_lang = "US";  
    protected $lang; 

    public function __construct($arg1=null, $arg2=null, $arg3=null) { 
     $this->lang = self::$default_lang; 
    } 
} 

class myChild extends mySuperClass { 

    public function __construct($arg1=null, $arg2=null, $arg3=null) { 
     $new_arg1 = parent::$default_lang; 
     echo "<br/>step 1) ". get_class(). " : lang= $new_arg1 "; 
     parent::__construct($new_arg1 , $arg2, $arg3) ; 
     echo "<br/>step 2) ". get_class(). " : lang= $this->lang"; // returns "US" 

    } 
} 

$obj = new myChild("foo1", "foo2", "foo3") ; 
+0

Thx, 나를 돕는 좋은 설명. – hornetbzz

관련 문제