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回のバリアントを使用しています。

2つの完全に異なるオブジェクトをインスタンス化するため、もちろん、プロパティ$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アプリケーションのように思われるため、既存のソリューションを調べて、どのように解決できるかを理解する必要があります。

于 2012-12-30T22:54:37.167 に答える