【PHP】フレームワークの中身を学ぼう【パーフェクトPHP】

プログラミング

【PHP】フレームワークの中身を学ぼう【パーフェクトPHP】

えんつかです!

プログラミング独学後、みごとWEB系自社開発に転職することができました。

独学では主にPHP/Laravelを学習していましたが、実務ではCakePHPを扱っています。

独学時にはあまりオブジェクト指向あたりを深く学んでいなかったのもあり、タスクをこなす上でメソッドやクラスを追えず、どこを修正していけばいいのかわからず苦労したことがありました。

そこで、先輩エンジニアに伺った所、「パーフェクトPHP」がオススメとのことでしたので、手にとって学んでみることにしました!

「パーフェクトPHP」ではフレームワークを実際に作る章があり、どのようにしてフレームワークが構成されているのか、理解を深めることができます。

理解を深めることができると、メソッドやクラスがどのように構成して絡んでいるのかもわかってくるので、どこを修正していけば良いかわかってくると。

実際に私も手を動かしながら学んでみたので、その感想や学んだことをつらつら書いていきます。

本記事を読むことで、学習する際に利用したツールやサイトや方法も含めて、まとめてみましたので、これから学習する方の参考になるかと思います!

それでは、いってみましょう〜!

【PHP】フレームワークの中身を学ぼう【パーフェクトPHP】

パーフェクトPHPでフレームワークの中身を学んでみてどうだったか、先に結論を言うと、『やってよかった』です。

フレームワークを作っていくと途中で気づくのですが、「CakePHP」の作られ方と似ているところが多く、「こうやって構成されていたのか!」という気づきが得られますし、案の定取り組む前と後でPHPの中身をより追えるようになりました。

本書籍の最新版でのバージョンは、PHP5なんですが、関係なしに学びが多かったです。あとで書きますが、PHP5での弊害も一部あったのでまとめておきます。

フレームワーク作成で学べること

フレームワーク作成で学べたことは以下の通りです。

  • ロジックとビューの分割
  • オブジェクト指向

ロジックとビューの分割

本書籍によると
ロジック:表示するために必要な情報を取得したり、保存処理を行うこと。
ビュー:実際に表示を行う処理のこと。

とのことです。
これらをプログラム中で適切に分割することで、「メンテナンス性」や「可読性」の向上に繋がります。

実務前では「メンテナンス性」や「可読性」を意識する機会がなかったのですが、実務に入るとわかりますがとても重要です。

実務ではコード量が膨大にありますし、色々な方が混じって開発をすることになるので、これらを向上しておくと新たに機能を開発・改修する際の時間を削減できるわけです。(Web業界ではコストが削減できると呼ぶようですね。)

MVCモデルのように分割することは超重要だとわかりました。肌感としても、どこに何があるか明確になっていると探すのに時間がかからないですもんね。

どのファイルでどんな処理を前もって行って、どのファイルに何を渡すか、といった処理を分けるわけですが、全体としての動きは捕らえられました。

もしフレームワークをつくなら、経験とか設計とかの知識がとても必要だと感じました。私のような初心者に毛が生えた程度ではすぐに構成するのが超むずいです。

フレームワークを作った人は天才かと思います。

この辺りは、まだまだ学ぶ余地は多いにありそうです。

オブジェクト指向

個人的にはオブジェクト指向を深く学んでいなかったこともあり、ここでの学びが一番大きかったです。

特に以下の点の理解が深まったのでグッドでした。

・なぜ、読み込んでいないと思えるファイルを実は読み込んでいてインスタンス化できるようになっているのか。
・なぜ、急に$this->request等が使えてしまうのか。
・なぜ、決まった名前でファイルを作ると認識されているのか。

Laravelを学んでいた時に、とりあえずかっ飛ばしていた内容が、理解が深まりました。

.htaccessファイルでApacheの設定でindex.phpを読み込むようにする。index.phpを読み込んだ際に、bootstrap.phpを読み込む。
その中でクラスをロードする処理を行うという一連の流れがあって

読み込んでいないと思えても、ファイルはちゃんとを読み込んでいてインスタンス化できるようになっていたわけでした。すごぉ。

その一連の流れで、クラス形成するときの__construct()やinitialize()メソッドで、$this->requestが使えるようにしていると。

そして、ちゃんとファイル名も大文字小文字で決めた規則通りに認識するように内部で事前に処理していました。

これが理解できたので、実務でどこをいじれば良いか、どのメソッドが効いているのか、以前より高速で追えるようになりました。

理解を深めるためにお勧めの方法

ぶっちゃけ、本書籍を手で動かしながらだけでは、

  • 全体像が掴みにくい
  • メソッドがどのように動いているのか
  • 変数がどのように格納されているのか

これを掴むのがとても難しく感じました。

なので、より理解を深めるために、NetBeansというものを利用することを強く薦めます。

こちらを用いると、要所要所でデバックをしてくれて変数に何が入っているのか、全体の動きが捕らえられやすくなります。

あれ今ここに何がきているんだ?ということになっても逐一確認できるので、理解を促進することができます!

ただ、難点としては自分のMAMP環境のバージョンを落とさないとアプリを利用できず使えないというところです。。。

ちょっと一手間必要ですが、トライしてみることを強く薦めます!

こちらの記事がパーフェクトPHPのデバックについてまとめられており、参考になりました。

パーフェクトPHPをデバックしました

以上でございます!

まだまだ学ぶことは多いなぁということを学びましたとさ!