見出し画像

【プロゲート】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を用いて書き換える

いいなと思ったら応援しよう!