PHP フレームワーク Application.php 作成

2018年9月1日

みなさんこんにちは!タカモリです。

前回から少し時間が空いてしまったのですが、phpの知識については日々少しづつ向上している毎日で、パーフェクトphpの内容も約8割くらい??は理解したと思っています。

もし初心者の方でパーフェクトphpを読んでいて7章で詰まった人がいたら伝えたいのですが、7章を読むだけで理解することは絶対に無理!!だと思います。

自分の場合はCakephpを軽く勉強して(正直あんまり関係なかったかな??)、7章と8章を照らし合わせ、MVCモデルやセッション、オブジェクト指向などの基本的なことをしっかり勉強するということから始めました。

で、わからないことがあったら「とりあえず飛ばす!!

今日も知らなかったわけではないんんだけど、正直あまりよくわかっていなかって読むのが嫌だった例外処理についてを勉強していました。

その際も本から読むとイメージがつきにくいので、まずはネットでわかりやすい記事を調べる。一通り理解できたらパーフェクトphpを読む。みたいな流れでやってました。

というわけでいつもどおり前談が長くなってしまったのだが、今回のsrcを貼っていく!!

と言いたいところなのだがもうsrcが長すぎて、一気にパッと貼れなくなってしまったのでsrcの画像は分割して貼っていくことにする!

今回のクラスはApplicationクラスだ!!

アプリケーションクラスでは、これまでに作成したクラスのインスタンス化や、デバッグモードの仕様、そして何より実際にこのフレームワークを利用して作られたアプリを動かす処理というのを記述していく。

まぁ、分割しながらでもぼちぼちやっていこう!なんしか長いので笑

各プロパティ

上の画像にApplicationクラスのプロパティを貼っておく。

$debugについては「true」又は「false」の真偽値(bool型)が入る。

以降のプロパティについては、前回までに作成したクラスのインスタンスが入ることになる。

コンストラクタ

今回のコンストラクタはインスタンス化された時点で3つのメソッドが実行されるようだ。

コンストラクタの引数には「true」又は「false」を受け取り、それをsetDebugMode()メソッドの引数に渡している。

setDebugMode()メソッド

コンストラクタから受け取った引数により、条件式で分岐させている。

このメソッド内に出てくる「ini_set()」関数はphpの設定を変更する関数で、display_errors1を指定することで、エラーを表示させ、0を指定することでエラーを非表示にするることができる。

なのでこのメソッドは、引数で受け取った値が「true」ならエラーを表示させ、「false」のときはエラーを表示させないということになる。

コンストラクタから受け取る初期設定は「false」なので、非表示が初期の値だ。

initialize()メソッド

このメソッドではこれまで作成したクラスのインスタンスを作成している。

Routerクラスのみややこしいことになっているが、これはルーティング定義配列を引数で渡す為だ。

ルーティング定義についてはフレームワーク側では定義できないのでこのクラスの子クラスで作成したものを渡す仕様である。

ちなみにinitializeという聞いたことない英語については初期化という意味らしい。高卒の俺には全く縁のなかった英語だ。

空・未定義のメソッド

configure()メソッドでは空のメソッドとして定義しているが、ここには子クラスでデータベースへの接続処理を書くことになっている。

getRootDir()メソッド及びregisterRoutes()メソッドは共に抽象メソッドとしている。getRootDir()にはそのアプリが入っているディレクトリまでのパス。registerRoutes()にはルーティング定義配列が入るので、フレームワーク側で定義できない為に子クラスとしている。

ただし!configure()メソッドが抽象クラスでなく何故空のメソッドとしているのかはわからない!!考えが足りてないのかなぁ・・・

isDebugMode()メソッド

このメソッドは上述した現在のエラー表示の状態を返すという簡単なメソッドだ。実にわかりやすくていい。

各クラスのインスタンスを返すメソッド

 

これらのメソッドが呼ばれた際にはそれぞれのクラスのインスタンスを返すことになっている。

これだけだと簡単に見えるのだが、これを呼び出した後は頭がこんがらがってくるので頭の整理が必要。

各ディレクトリまでのパスの呼び出し

子クラスで定義するgetRootDir()を利用してその後にスラッシュとディレクトリ名を文字列で記述することで、それぞれのディレクトリのパスを返す仕組みだ。

 

というわけで、今回はここまでだ。

ここまではそこまで難しいことはないような気はする。次回の内容からは少し複雑なので俺ももう少し頭の整理でもしよう!!

ゴールデンウィークだし!!!