以下のようなことを実現したいのですが可能でしょうか?
そもそもコンストラクタインジェクションの使い方がおかしい?
親クラスのコンストラクタ
protected $hoge; public function __construct(Hoge $hoge) { $this->hoge = $hoge; $this->hoge->fuga = 'fuga'; // デフォルト値 }
上記の親クラスを継承した子クラスのコンストラクタ。
public function __construct() { parent::__construct(); $this->hoge->fuga = 'piyo'; // 子クラスでデフォルト値を上書きする。 }
上記子クラスのコードは、エラーになります。
parent::__construct();の引数にHogeのインスタンスを渡していないからです。
そのため、子クラスのコンストラクタを以下のようにする必要があります。
public function __construct(Hoge $hoge) { parent::__construct($hoge); $this->hoge->fuga = 'piyo'; // 子クラスでfugaを上書きする。 }
もしくは、親クラスのコンストラクタを以下にするのも解決法かとは思いますが。。
protected $hoge; public function __construct() { $this->hoge = new Hoge(); $this->hoge->fuga = 'fuga'; // デフォルト値 }
親クラスでnewを使うのも微妙ですし、
わざわざ子クラスから渡すのも微妙ですし。。
もっと良い書き方があれば知りたいです。
そもそもコンストラクタインジェクションの使い方がおかしいのでしょうか?
ご教示頂けると有難いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/13 03:29