2011-12-31 94 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