社内で行った初心者向けPHP勉強会のスライドを改変したものです。社内のiOSエンジニアを想定して資料を作成しました。プログラム自体の初心者ではないが、PHPでのウェブサービスの作り方についてよく分からないという方向けの入門です。この文書に記述されていることPHPでウェブアプリを作成するための重要な知識とツールをまとめました。この文書に記述されていないこと文法については説明しません。HTML,CSS,Javascriptなどのフロントエンド関連の情報もありません。'hoge';PHPのコード例です。PHPは現時点(PHP5.6)ではとても平凡な文法の言語です。他の普通の言語(Ruby,Java,C++)を一つでも知っている人であれば文法の習得は容易です。WayPHPによる現時点でのベストプラクティスをまとめ上げたウェブサイト。文法に関する説明はありません。PHP逆引きレシピ第2版PHPを使ったコードの実装方法について詳細に記述されています。文法についても学べます。初心者に一冊与えるとしたらこれです。PHPPHPを使ったウェブサービスを提供する上での基本的な知識が網羅されています。他の言語を使える人にとってのとても良いPHP入門書ですが英語です。PHPの文法に関する説明は一部を除いてありません。'hoge';上記のソースコードはコマンドラインとしてもウェブページとしても表示させられます。hoge.phphogeスクリプト言語なので普通にコマンドラインから実行できます。$という文字はコマンドプロンプトを意味します。実際には入力しません。localhost:80005.4以降のPHPではビルトインウェブサーバを使うことができます。Apacheやnginxを使用せずともPHPの動作確認が可能です。一度に一つのリクエストしか受け付けてくれないので本番サーバには使用できません。用意されていますがが、あまり便利ではありません。"Asia/Tokyo",}>>>psyshはPHPのコードを対話型に実行できる、俗に言うREPLです。Rubyで言うところのpryです。入力した内容が即座に反映されるので言語やライブラリの習得に便利です。tinkerを実行する時に内部で呼ばれているのもこのpsyshです。ライブラリのインストールとバージョン固定について(Composer,Packagist)composerについてサードパーティのライブラリのプロジェクト単位でのインストールやバージョン固定、依存性管理を行います。node.jsのnpm,RubyのBundler,Pythonのpipのようなものです。2011年に開発が開始されました。ダウンロード数やユーザーが付けたスターの数も確認できます。基本的な使い方carbonというライブラリをインストールするには以下のコマンドで行います。nesbot/carbonインストールするライブラリ名やバージョンはcomposer.jsonに記述することもできます。依存情報をテキストに記述することでgitでの版数管理が可能になります。コマンドでインストールしたライブラリの情報もcomposer.jsonに自動的に追記されます。"^1.20"}}インストールしたライブラリはvendorディレクトリに配置されます。インストールしたライブラリは以下のrequire文を追加するだけで利用できるようになります。依存するライブラリが複数あってもこの一つのrequire文だけで使用できるようになります。-g」のようにグローバルにインストールすることもできます。requireを実行すると、~/.composer/vendor以下にphpunitがインストールされます。実行可能なプログラムがある場合~/.composer/vendor/bin/にインストールされます。create-projectが使えることがあります。上記はlaravelの例です。Recommendationの略です。近代的な言語機能が追加される時期が遅かった(名前空間のサポートは2009年の5.3.0までありませんでした)こともあり、microなものやフルスタックなものなど非常にたくさんのWAFが乱立しています。WAFは様々なコンポーネントから成り立っています。他のWAFのコンポーネントを相互に使うことが難しい状態でした。Group)が発足しました。PHP-FIGのメンバー達がコンポーネント間の相互利用を目的にコーディング規約やロガーのインターフェイスなどを整備したものがPSRです。indexで見られます。コンポーネント作成者向けですがPSR-2はコーディング規約であり普通のプログラマにも有用です。PHPStormなどのIDEを使用していれば自然にPSR-2のスタイルに整形されます。最近ではHTTPのメッセージングI/Fを規定するPSR-7が制定されました。DIコンテナの規約であるPSR-11なども提案されています。PSRとComposerの恩恵ComposerとPSRによりフレームワーク間のコンポーネントの相互利用が容易になってきました。Slimframeworkルータ、DIコンテナ、HTTPメッセージングに外部コンポーネントを利用しています。DIコンテナはPSR-11を満たすどんなコンポーネントも使用できます。HTTPメッセージングはPSR-7を満たすどんなコンポーネントも使用できます。LaravelLaravelは多くのSymfony2のコンポーネントを利用しています。ORMは他のフレームワークでも利用できます。フラットなPHPからWAFへフラットなPHPフラットなPHP=1ファイルで書かれたPHP以下はビューもロジックも混在したフラットなPHPファイルの例です。処理を切り分けることをルーティングと言います。$app->request->params('paramName');//HTTPステータスの変更$app->response->setStatus(404);HTTPのリクエストやレスポンスを簡単に扱うための仕組みです。WAF紹介PSRのセクションで紹介した通りPHPにはたくさんのWAFが存在します。以下に主だったWAFの年表があります。Collections今回はmicroなものとmacroな物をひとつづつ紹介します。Lockhartが作成したWAFです。Rubyで言うところのSinatraです。hoge2014年にブレイクしたWAFです。Eloquentという独自のORMを持っています。Rubyで言うところのRailsです。データの永続化ウェブサイトではユーザーから受け取ったデータを保存したり取り出したりする処理が必要になることがあります。データの保存にはデータベースが利用されます。Object(PDO)データベースを利用する現時点で一番原始的な方法がPDOによるものです。テーブルとSQLを直接意識して操作する必要があります。mapping)ライブラリです。Recordパターンはわかりやすい反面ベースとなる大きいクラスを継承したクラスを利用するため後述するDataMapperパターンを適用したORMに比べてパフォーマンスが劣ります。|+------------+------------------+------+-----+---------------------+----------------+usersというテーブルが既にあれば、Eloquentを継承したクラスを作るだけでデータベースを直感的に操作できます。MapperパターンをベースとしたORMです。SymphonyフレームワークにはDoctrine2というORMコンポーネントが含まれています。1.0がリリースされました。リポジトリマネージャーに分離することができます。testingを行うためのフレームワークです。assertメソッドを用いてコードが期待する動作をすることをテストします。このようなクラスBのふりをするオブジェクトをモックと呼びます。phpunitにもmock作成ツールはありますが使いやすいmockeryが広く使われています。laravelのコンポーネントもmockeryによりテスト時の入れ替えが容易になっています。終わりにPHPでウェブアプリを作成するための重要な知識とツールをまとめました。Push投稿者プロフィールokanogolangが好きです。