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

运行时返回空变量:

jgalley@jgalley-debian:~/code/otest$ php run.php 
args:  = 
4

1 回答 1

1

__construct()是构造函数。您正在使用古代 PHP4 时代的变体。

您实例化了两个完全不同的对象,因此该属性当然$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,所以您应该查看现有的解决方案以了解如何解决它。

于 2012-12-30T22:54:37.167 回答