0

DIC でオブジェクトをインスタンス化するために特性を使用したいと思います。

trait TUseContainer {

    protected $c;

    public function __construct(Container $c) {
        $this->c=$c;
    }

}

class MyClass {
    use TUseContainer;

    //Optional
    public function __construct(ClassInheritedFromContainer $c){
        TUseContainer::__construct($c);
        //MyClass __construct stuff
    }

}

だから私の質問は:

  1. TUseContainer::__construct($c); を実行しますか? 動作します?
  2. そうでない場合は、parent::__construct($c); を行います。トリックを行いますか?(当たらないと思います)
  3. 特性::myOverridedMethod(); です。非静的オーバーライド メソッドを呼び出す良い方法は?
  4. 「as」キーワードを使用する必要があると思いますか? (それは悪い考えだと思います)
  5. 「TUseContainer」は、私がやろうとしていることの良い名前ですか?

すべてのコメントを歓迎します。

いくつかのテストを行い、結果を投稿します。

4

1 に答える 1

0

私はいくつかの簡単な回避策を得ました:

trait TUseContainer {

    protected $c;

    public function __construct(Container $c) {
        $this->setContainer($c);
    }

    protected function setContainer(Container $c){
        $this->c=$c;
    }
}

class MyClass {
    use TUseContainer;

    //Optional
    public function __construct(ClassInheritedFromContainer $c){
        $this->setContainer($c);
        //MyClass __construct stuff
    }

}
  1. いいえ
  2. いいえ
  3. いいえ
  4. いいえ
  5. 開ける

すべてのコメントは引き続き歓迎されます

于 2013-06-21T11:01:56.320 に答える