【プロゲート】PHP PHP IVの学習内容まとめ
PHP IV
1.目標物を確認しよう
オブジェクト指向を学ぼう
・引き続きオブジェクト指向を学んでいく
・新たにクラスを作り、オブジェクトの組み合わせ方を学びながら、
PHPⅢで作成した料理注文サービスにレビュー一覧を表示する機能を追加していく
2.リンクを作ろう
詳細ページを作ろう
・ここからはメニューそれぞれの詳細ページ(show.php)を作っていく
・それぞれの詳細ページでは最終的にレビュー一覧を表示することを目指す
リンクを作ろう
・詳細ページに飛ぶためのリンクを<a>タグを用いて作成する
・リンク先のページにはshow.phpを指定する
3.クエリ情報
リンク先に情報を渡そう
・どのメニューの名前をクリックしてもshow.phpに飛ぶが、どのメニューがクリックされたかはshow.phpからはわからないので、どのメニューの詳細を表示するべきかわからない
・そこでshow.phpにどのメニューがクリックされたかの情報を渡す必要がある
クエリ情報
・URLの末尾の「?」以降に「キー名=値」の形で簡単な情報をのせることができる
・これをクエリ情報といい、クエリ情報を用いてリンク先のページに情報を渡す(送信する)ことができる
・クエリ情報を用いると、show.phpがどのメニューの詳細ページを表示するべきかわかるようになる
$_GET
・クエリ情報を受け取るには「$_GET」を使用する
・$_GETにはクエリ情報が連想配列として入っている
・よって、$_GET['キー名']のように値を取り出すことができる
4.詳細ページの中身を作ろう
詳細ページの中身を作ろう
・ここではクリックされたメニューの詳細(名前、値段など)をshow.phpで表示していくので、そのメニューのインスタンスを取得する必要がある
・現在、show.phpでは表示すべきメニューの名前がわかっている($_GETで取得できるようになっている)ので、そのメニューの名前(nameプロパティ)からインスタンスを取得するメソッドを作っていく
特定のメニューインスタンスを取得しよう
・nameプロパティの値を用いて、配列$menusから特定のMenuインスタンスを取得するクラスメソッド(findByNameメソッド)を作成していく
・findByNameメソッドの作り方を見ていく
return
・findByName()メソッドを実装するために、まずは「return」について新しい知識を学ぶ必要がある
・returnが戻り値を返すことは「PHPⅠ」で学習したが、実はreturnには戻り値を指定するだけでなく、returnが呼ばれた部分で関数やメソッドの処理を終了させるという性質がある
findByNameメソッドを実装しよう
・繰り返し処理の中でnameが一致するインスタンスがあると、returnの部分でそのインスタンスを戻り値として返して処理が終了するので、それ以降の繰り返しは行われない
5.Reviewクラスを作ろう
Reviewクラスを作ろう
・ここからは詳細ページにレビューを表示していく
・レビューの1つ1つをオブジェクトとみなし、Reviewクラスのインスタンスとしたいので、Reviewクラスを作っていく
・Reviewクラスには、どのメニューのレビューかという情報$menuNameプロパティと、レビューの内容である$bodyプロパティを定義する
6.Reviewのデータを作ろう
Reviewのデータを作ろう
・Reviewクラスを作成したので、Reviewクラスを元にReviewインスタンスを生成していく
7.レビューを表示しよう
レビューを表示しよう
・ここでは一旦どのメニューの詳細ページにもすべてのレビューを表示する
8.関連するレビューを表示しよう
レビューを取得しよう
・それぞれの詳細ページには関連したレビューだけを表示するようにする
・メニューのnameプロパティとレビューのmenuNameプロパティを用いて、関連するReviewインスタンスを取得するメソッド(getReviewsメソッド)を作成する
getReviewsメソッドを実装しよう
・まず空の配列($reviewsForMenu)を用意し、その配列に名前の一致したReviewインスタンスを追加していく
・最後にReviewインスタンスの入ったその配列を戻り値として返す
(配列に要素を追加する方法は「PHPⅠ」を復習)
9.Userクラスを作ろう
レビューを書いた人の名前を表示しよう
・ここからはそれぞれのレビューにそのレビューを書いたユーザーの情報を表示していく
Userクラスを作ろう
・ユーザー1人1人をオブジェクトとみなし、それぞれをUserクラスのインスタンスとしたいのでUserクラスを作成する
・Userクラスには、ユーザーの名前のデータ(nameプロパティ)と性別のデータ(genderプロパティ)を定義する
10.Userのデータを作ろう
Userのデータを作ろう
・Userクラスを作成したので、Userクラスを元にUserインスタンスを生成していく
11.ReviewとUserをひも付けよう
ReviewとUserをひも付けよう
・どのユーザーがどのレビューを書いたかがわかるよう、「紐付け」をする
・レビューを書いたユーザー名を保存するために、userNameプロパティをReviewクラスに定義する
・また、そのuserNameプロパティの値を利用して、名前が一致するUserインスタンスを取得するgetUserメソッドをReviewクラスに定義する
関連するユーザーを取得しよう
・getUserメソッドを実装する
12.ユーザーの情報を表示しよう
ユーザーの情報を表示しよう
・レビューを書いたユーザーの名前を表示していく
・また、ユーザーのgenderプロパティの値によってアイコンの表示を変える
13.id
ユーザーを識別しよう(1)
・同じnameプロパティを持つUserインスタンスを作成すると、あるレビューを書いたのがどのユーザーなのか識別できなくなってしまう
・ここではそれぞれのユーザーを識別できるようにしていく
ユーザーを識別しよう(2)
・Userインスタンスになんらかの一意な(それぞれのインスタンスで異なる)値を持たせることによって、それぞれのUserインスタンスを識別できるようにする
・ここではidというプロパティを持たせ、そのidに1から順に番号を入れていくことによって識別できるようにする
idプロパティの値
・それぞれのidに1から順に数値を入れていくにはどうすればよいか?
・生成されたインスタンスの数を管理しておくと、その数を用いてidプロパティに適した値を入れることができる
・インスタンスが何個作られたのか管理する方法はMenuクラスで学習しているのでそれを用いる
14.idでReviewとUserを紐付けよう
ReviewとUserの紐付け
・現在、ReviewインスタンスとUserインスタンスはユーザーのnameで紐付いているため、同じnameのユーザーがいるとレビューに紐付いたユーザーを正しく取得することができない
idでReviewとUserを紐付けよう
・nameではなくてidを用いてReviewとUserを紐付けると、Reviewインスタンスに紐付いているUserインスタンスを確実に特定できる
・Reviewインスタンスにはユーザーの名前(userNameプロパティ)の代わりにユーザーのid(userIdプロパティ)を持たせるようにする
・また、getUserメソッドはnameを利用していたが、idを用いて書き換える