4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2019新卒 エンジニアAdvent Calendar 2019

Day 1

フレームワークを理解するために自作PHPフレームワーク作ってみた

Posted at

この記事は2019新卒 エンジニア Advent Calendar 2019の1日目の記事です。
(参加しようと思ったのが13日でしたが、空いている枠が1日しかありませんでしたので1日目の記事として投稿しました。すみません。)

動機

仕事でフレームワークを使ってWebアプリを開発しています。
自作でフレームワークを作ることで、

  • プログラマとしてのスキルアップ
  • フレームワークが何をしているのか理解できるようになり、バグの原因発見が容易になる
  • 機能追加の際にフレームワークの動きも加味していいコードが書けるようになる

以上のメリットがあると考えたためです。

どのように作ったか

パーフェクトPHPの第7~8章を参考にしました。

得られた知見(大きなもの一部抜粋)

スクラッチでフレームワークを作ることで以下のような知見を得られました。

PHPがどのようにレスポンスを返すか

header('HTTP/1.1 200 OK') #HTTP header
echo $content; #HTTP body

恥ずかしいことにechoでresponsebodyを返していることすら理解していませんでした...
HTTPRequest/Responseを追えるようになったのは大きな成長だと思います。

リクエストURLからコントローラへの橋渡し

$tokens = explode('/', ltrim($url, '/'));
foreach ($tokens as $i => $token) {
   if (0 === strpos($token, ':')) {
      $name = substr($token, 1);
      $token = '(?P<' . $name . '>[^/]+)';
   }
   $tokens[$i] = $token;
}
$pattern = '/' . implode('/', $tokens);
$routes[$pattern] = $params;

urlを分割し、controller名とaction名に分ける処理です
この後ルーティングを参照し、controller名を使って目的のphpをrequireします
普段投げているリクエストURLがどのようにcontrollerと結びついているのかを知ることができました

まとめ

普段意識せずにviewとcontrollerを配置してwebアプリを実装していました。
今回のようにスクラッチでフレームワークを実装してみると大小様々に得られるものが多く、特に

  • PHPの言語的な理解
  • フレームワーク内の処理に関する理解

が深まって良いのではないかと思います。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?