2011-12-31 126 views
1

在Child類中,我需要訪問父屬性「$ this-> lang」並將其用於其他屬性,然後再調用父類再次構造函數,如:在使用父:: _構造之前訪問父類屬性在父類:: _構造

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") ; 

的父類不是在這個階段,我們正試圖調用父屬性$這個 - >郎實例化這看起來並不可能/允許的。這似乎合乎邏輯。

所以問題是:
有沒有一種方法來訪問子類中的父屬性,使用構造函數覆蓋如下所示?

回答

2

如果你是靜態設置這些東西(即使用硬編碼的字符串),然後使它(至少默認)靜態屬性(可能甚至是類常量)。然後引用父級的靜態變量在子構造函數中(也在父級的構造函數中)

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 2012-08-02 01:14:59