PHPコーディング
オーバーライドと親クラスのメソッド実行
2013年01月18日
親クラス
子クラス1 親クラスを継承
子クラス2 親クラスを継承
があるとします。
子クラス1
日時取得
ファイル名に子クラス1と設定
子クラス2
日時取得
ファイル名に子クラス2と設定
と実行したいとします。
この場合、共通している日時取得は親クラスでやりたくなります。
これらの処理を、クラス読み込み時に行いたかったので、
親クラスの【__construct】関数に日時処理を、
それぞれの子クラスの【__construct】にファイル名の設定処理を
書きました。
ところが、関数が同じなので、親クラスの【__construct】は子クラスの【__construct】で上書きされてしまい、親クラスの【__construct】に書いた日時処理は実行されません。
これをオーバーライドと言います。
では、親クラスの【__construct】に書いた日時取得処理を実行するにはどうすればよいか。
子クラスの【__construct】に【parent::__construct();】の処理を書けば実行されます。
親クラスの__construct
日時取得
子クラス1の__construct
parent::__construct();
ファイル名に子クラス1と設定
子クラス2 __construct
parent::__construct();
ファイル名に子クラス1と設定
これで目的が達成されます。子クラスが2つくらいなら、子クラスの方へ書いてしまったほうが分かりやすいかもしれません。
ですが、子の数が増えると親クラスで共通に処理しておかないと、メンテナンスが大変になります。
PHPのオブジェクト指向入門
にとても分かりやすい記事があります。
子クラス1 親クラスを継承
子クラス2 親クラスを継承
があるとします。
子クラス1
日時取得
ファイル名に子クラス1と設定
子クラス2
日時取得
ファイル名に子クラス2と設定
と実行したいとします。
この場合、共通している日時取得は親クラスでやりたくなります。
これらの処理を、クラス読み込み時に行いたかったので、
親クラスの【__construct】関数に日時処理を、
それぞれの子クラスの【__construct】にファイル名の設定処理を
書きました。
ところが、関数が同じなので、親クラスの【__construct】は子クラスの【__construct】で上書きされてしまい、親クラスの【__construct】に書いた日時処理は実行されません。
これをオーバーライドと言います。
では、親クラスの【__construct】に書いた日時取得処理を実行するにはどうすればよいか。
子クラスの【__construct】に【parent::__construct();】の処理を書けば実行されます。
親クラスの__construct
日時取得
子クラス1の__construct
parent::__construct();
ファイル名に子クラス1と設定
子クラス2 __construct
parent::__construct();
ファイル名に子クラス1と設定
これで目的が達成されます。子クラスが2つくらいなら、子クラスの方へ書いてしまったほうが分かりやすいかもしれません。
ですが、子の数が増えると親クラスで共通に処理しておかないと、メンテナンスが大変になります。
PHPのオブジェクト指向入門
にとても分かりやすい記事があります。
コメント