こまごましたロジックとかはちょいちょい書いてたけど、
いまいち継承とかみたいなオブジェクト指向!って感じの考え方がうまく身についてなくて。
せっかくだしまとめてメモ書きみたいにしとこうかなと。
<?php class Test1 { // メソッド名がクラス名と同じでもコンストラクタになる // ex) public function Test1(){} public function __construct(){ //self::test22()だとメンバ関数を呼んでしまう //インスタンス内で自身のメソッドを呼ぶのは$this $this->test22(); } public function test22(){ // Test1をインスタンス化した時にはこっちが実行される echo "this is test1<BR>"; } } class Test2 extends Test1{ // Test1を継承してるので、コンストラクタはTest1のものを使う // もしTest1でself::test22()と書いてあると、Test1::test22() // が実行される。 public function test22(){ // Test2をインスタンス化した時にはこっちが実行される echo "this is test2<BR>"; } } // インスタンス化 $a = new Test1; $b = new Test2; //結果 // this is test1 // this is test2
コメントにも書いてるけど、selfはメンバ関数を呼んでしまうので、
インスタンス関数を呼び出したい場合は$thisを使う。
なんでこんなことしたかって言うと、
ZendFrameworkのinitとは別に個別のコントローラーで実行するinitを作りたくて。
現場のやつはフレームワークに手を入れてたんだけど、
こういうやり方もあるよなぁっと考えてみた。
<?php // 元となるコントローラー // 各コントローラーで共通の処理とか書く? class rootController extends Zend_Controller_Action { public function init() { // !コントローラー個別処理前の処理! // 継承先のpartInit();を読み込ませる // !コントローラー個別処理後の処理! $this->partInit(); } } // 個別機能のコントローラー class indexController extends rootController { // 個別のコントローラー内ではこのメソッドがinit替りになる public function partInit(){ } public function indexAction() { } }
こんな感じで?
2つ目のソースは動かしてないからなんかあってもしーらない