2012-12-30 194 views
0

父類是從子類外部構造的,因此,它的構造函數不能從子內部調用。在這種情況下,應該如何訪問孩子父母的屬性。從子類訪問外部初始化父類的屬性

實施例:在運行時被返回

class MyParent { 
    protected $args; 
    protected $child; 

    public function MyParent($args=false){ 
     $this->args=$args; 
     $this->child=new MyChild(); 
    } 
    public function main(){ 
     $this->child->printArgs(); 
    } 
} 

class MyChild extends MyParent{ 
    public function MyChild(){} 
    public function printArgs(){ 
     Echo "args: ".$this->args['key']." = ".$this->args['value']."\n"; 
    } 
} 

$parent=new MyParent(array('key'=>'value')); 
$parent->main(); 

空變量:

[email protected]:~/code/otest$ php run.php 
args: = 

回答

1

__construct()是構造。您使用的是古代PHP4時代的變體。

您可以instanciate兩個完全不同的對象,因此當然屬性$args是完全獨立的。

abstract class MyParent { 
    protected $args; 

    public function __construct($args=false){ 
     $this->args=$args; 
    } 
    public function main(){ 
     $this->printArgs(); 
    } 
    abstract public function printArgs(); 
} 

class MyChild extends MyParent{ 
    public function printArgs(){ 
     Echo "args: ".$this->args['key']." = ".$this->args['value']."\n"; 
    } 
} 

$$object=new MyChild(array('key'=>'value')); 
$object->main(); 

這至少有效,但問題是,我不確切知道設計目標是什麼。因爲它似乎是一種cli-Application,你應該看看現有的解決方案來獲得一個想法,以及如何解決它。