PHPで子クラスが継承時に親クラスで定義している変数に必ず値をセットさせたいのですが、どうすれば良いでしょうか?
恐らくcakeに限ったことではないと思いますが、cakePHPを使用しています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
クラスの継承に関しては、CakePHPはとても厄介な存在です。
出来ればCakePHPのバージョンを提示し、具体的なソースコードを出していただけると助かります。
なぜCakePHPだと厄介かと言うと、そもそもCakePHPではModelやController等がCakePHP指定のAppController等を親としたクラス構造を強制される事にあります。
以下は予測を含んだ回答ですが。
PHP
1class OyaController extends AppController { 2 public $uses = array('Model1', 'Model2'); 3 public $components = array('Com1', 'Com2'); 4}
と言うような、usesやcomponents, helper等を定義したクラスがあり、そのクラスを親とする
PHP
1class KodomoController extends OyaController { 2 public function kodomoSenyouAction() { 3 $this->Model1->find(); 4 } 5}
など、親で定義したModel等を使いたいのでは、と思いますが、いかがでしょうか。
その場合、Controllerであれば、beforeFilter等で、親が持っているプロパティを再定義する必要があります。
投稿2016/07/29 08:37
総合スコア5405
0
kunaiさんが仰っているように、単純に親クラスで定義したプロパティを利用したい場合は子クラスのbeforeFilterで
php
1public function beforeFilter() { 2 parent::beforeFilter(); 3}
を呼ぶ事で解決できると思います。
一例として挙げておきます。
php
1class ParentController extends AppController { 2 3 public $username; 4 5 public function beforeFilter() { 6 $this->username = 'hoge'; 7 } 8} 9 10class ChildController extends ParentController { 11 12 public function beforeFilter() { 13 parent::beforeFilter(); 14 } 15 16 public function index() { 17 echo $this->username; # 'hoge'が出力される 18 } 19}
投稿2016/08/02 03:44
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
親クラスの構造が分からないと具体的な回答はできないので、
一例だけ紹介させていただきます。
php
1class ParentClass { 2 3 private $parameter; 4 5 function __construct($parameter) { 6 $this->parameter = $parameter; 7 } 8 9 function getParameter() { 10 return $this->parameter; 11 } 12 13} 14 15class ChildClass extends ParentClass { 16 17 function __construct($parameter) { 18 parent::__construct($parameter); 19 } 20 21} 22 23$child = new ChildClass('hoge'); 24print $child->getParameter() . "\n"; 25 26// これはアラートが発生する 27$child = new ChildClass();
実行結果
hoge Warning: Missing argument 1 for ChildClass::__construct(), called in /tmp/test.php on line 28 and defined in /tmp/test.php on line 18 Notice: Undefined variable: parameter in /tmp/test.php on line 19
投稿2015/12/11 04:30
総合スコア4791
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。