前提・実現したいこと
PHPを勉強し始めたプログラミング初心者です。
ProgateのPHP学習コース4をやっているのですが、下のmenu.phpのgetReviews()を定義しているところでrequire_onceで読み込んでいないreview.phpで定義したクラスのプロパティメソッドであるgetMenuName()が使用できているのですが、読み込んでいないファイルのメソッドがなぜ使えているのかわかりません。
実際にgetReviews()を使用しているshow.phpでだdata.php、ひいてはreview.phpを読み込んでいるから使えるという理解でよろしいのでしょうか?
どなたか教えていただけると幸いです。
発生している問題・エラーメッセージ
エラーは発生しておりません。
該当のソースコード
menu.php
<?php class Menu { protected $name; protected $price; protected $image; public function __construct($name, $price, $image) { $this->name = $name; $this->price = $price; $this->image = $image; } public function getName() { return $this->name; } // getReviewsメソッドを定義してください public function getReviews($reviews){ $reviewsForMenu = []; foreach($reviews as $review){ if($this->name == $review->getMenuName()){ $reviewsForMenu[] = $review; } } return $reviewsForMenu; } } ?>
review.php
<?php class Review { private $menuName; private $body; public function __construct($menuName, $body) { $this->menuName = $menuName; $this->body = $body; } public function getMenuName() { return $this->menuName; } public function getBody() { return $this->body; } }
data.php
<?php require_once('drink.php'); require_once('food.php'); require_once('review.php'); $juice = new Drink('JUICE', 600, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/juice.png', 'アイス'); $coffee = new Drink('COFFEE', 500, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/coffee.png', 'ホット'); $curry = new Food('CURRY', 900, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/curry.png', 3); $pasta = new Food('PASTA', 1200, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/pasta.png', 1); $menus = array($juice, $coffee, $curry, $pasta); $review1 = new Review($juice->getName(), '果肉たっぷりのオレンジジュースです!'); $review2 = new Review($curry->getName(), '具がゴロゴロしていてとてもおいしいです'); $review3 = new Review($coffee->getName(), '香りがいいです'); $review4 = new Review($pasta->getName(), 'ソースが絶品です。また食べたい。'); $review5 = new Review($juice->getName(), '普通のジュース'); $review6 = new Review($curry->getName(), '値段の割においしいカレーだと思いました'); $review7 = new Review($coffee->getName(), '苦味がちょうどよくて、おすすめです'); $review8 = new Review($pasta->getName(), '具材にこだわりを感じました。'); $reviews = array($review1, $review2, $review3, $review4, $review5, $review6, $review7, $review8); ?>
show.php
<?php require_once('menu.php'); require_once('data.php'); $menuName = $_GET['name']; $menu = Menu::findByName($menus, $menuName); // $menuに対して$reviewsを引数としてgetReviewsメソッドを呼び出して、戻り値を変数$menuReviewsに代入してください **$menuReviews = $menu->getReviews($reviews);** ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Progate</title> <link rel="stylesheet" type="text/css" href="stylesheet.css"> <link href='https://fonts.googleapis.com/css?family=Pacifico|Lato' rel='stylesheet' type='text/css'> </head> <body> <div class="review-wrapper"> <div class="review-menu-item"> <img src="<?php echo $menu->getImage() ?>" class="menu-item-image"> <h3 class="menu-item-name"><?php echo $menu->getName() ?></h3> <?php if ($menu instanceof Drink): ?> <p class="menu-item-type"><?php echo $menu->getType() ?></p> <?php else: ?> <?php for ($i = 0; $i < $menu->getSpiciness(); $i++): ?> <img src="https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/chilli.png" class='icon-spiciness'> <?php endfor ?> <?php endif ?> <p class="price">¥<?php echo $menu->getTaxIncludedPrice() ?></p> </div> <div class="review-list-wrapper"> <div class="review-list"> <div class="review-list-title"> <img src="https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/review.png" class='icon-review'> <h4>レビュー一覧</h4> </div> <!-- $reviewsを$menuReviewsに書き換えてください --> <?php foreach($menuReviews as $review): ?> <div class="review-list-item"> <p><?php echo $review->getBody() ?></p> </div> <?php endforeach ?> </div> </div> <a href="index.php">← メニュー一覧へ</a> </div> </body> </html>
試したこと
Progateではこのコードでいいと言われました。
補足情報(FW/ツールのバージョンなど)
Progate PHP学習コースⅣ
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/02 07:55