感想
すっげー難しかった。ダメかも・・。配列とコンストラクタとゲッターが合わさると頭がこんがらがる。ただ、どこが難しかったかは分かる。そして一つ一つの意味も分かる。組み合わさった時に訳が分からなくなる。どうすればいいんだ。やっぱ自分で一から何かしら作らないといけない感じなのか
総合演習
<?php require_once('data.php'); require_once('menu.php'); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Café 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="menu-wrapper container"> <h1 class="logo">Café Progate</h1> <h3>メニュー<?php echo Menu::getCount() ?>品</h3> <form method="post" action="confirm.php"> <div class="menu-items"> <?php foreach ($menus as $menu): ?> <div class="menu-item"> <img src="<?php echo $menu->getImage() ?>" class="menu-item-image"> <h3 class="menu-item-name"> <a href="show.php?name=<?php echo $menu->getName() ?>"> <?php echo $menu->getName() ?> </a> </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> <input type="text" value="0" name="<?php echo $menu->getName() ?>"> <span>個</span> </div> <?php endforeach ?> </div> <input type="submit" value="注文する"> </form> </div> </body> </html>
<?php require_once('menu.php'); require_once('data.php'); $menuName = $_GET['name']; $menu = Menu::findByName($menus, $menuName); $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> <?php foreach ($menuReviews as $review): ?> <?php $user = $review->getUser($users) ?> <div class="review-list-item"> <div class="review-user"> <?php if ($user->getGender() == 'male'): ?> <img src="https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/male.png" class='icon-user'> <?php else: ?> <img src="https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/female.png" class='icon-user'> <?php endif ?> <p><?php echo $user->getName() ?></p> </div> <p class="review-text"><?php echo $review->getBody() ?></p> </div> <?php endforeach ?> </div> </div> <a href="index.php">← メニュー一覧へ</a> </div> </body> </html>
<?php class Menu { protected $name; protected $price; protected $image; private $orderCount = 0; protected static $count = 0; public function __construct($name, $price, $image) { $this->name = $name; $this->price = $price; $this->image = $image; self::$count++; } public function hello() { echo '私は'.$this->name.'です'; } public function getName() { return $this->name; } public function getImage() { return $this->image; } public function getOrderCount() { return $this->orderCount; } public function setOrderCount($orderCount) { $this->orderCount = $orderCount; } public function getTaxIncludedPrice() { return floor($this->price * 1.08); } public function getTotalPrice() { return $this->getTaxIncludedPrice() * $this->orderCount; } public function getReviews($reviews) { $reviewsForMenu = array(); foreach ($reviews as $review) { if ($review->getMenuName() == $this->name) { $reviewsForMenu[] = $review; } } return $reviewsForMenu; } public static function getCount() { return self::$count; } public static function findByName($menus, $name) { foreach ($menus as $menu) { if ($menu->getName() == $name) { return $menu; } } } } ?>
<?php require_once('drink.php'); require_once('food.php'); require_once('review.php'); require_once('user.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); $user1 = new User('suzuki', 'male'); $user2 = new User('tanaka', 'female'); $user3 = new User('suzuki', 'female'); $user4 = new User('sato', 'male'); $users = array($user1, $user2, $user3, $user4); $review1 = new Review($juice->getName(), $user1->getId(), '果肉たっぷりのオレンジジュースです!'); $review2 = new Review($curry->getName(), $user1->getId(), '具がゴロゴロしていてとてもおいしいです'); $review3 = new Review($coffee->getName(), $user2->getId(), '香りがいいです'); $review4 = new Review($pasta->getName(), $user2->getId(), 'ソースが絶品です。また食べたい。'); $review5 = new Review($juice->getName(), $user3->getId(), '普通のジュース'); $review6 = new Review($curry->getName(), $user3->getId(), '値段の割においしいカレーだと思いました'); $review7 = new Review($coffee->getName(), $user4->getId(), '苦味がちょうどよくて、おすすめです'); $review8 = new Review($pasta->getName(), $user4->getId(), '具材にこだわりを感じました。'); $reviews = array($review1, $review2, $review3, $review4, $review5, $review6, $review7, $review8); ?>
<?php class Review { private $menuName; private $userId; private $body; public function __construct($menuName, $userId, $body) { $this->menuName = $menuName; $this->userId = $userId; $this->body = $body; } public function getMenuName() { return $this->menuName; } public function getBody() { return $this->body; } public function getUser($users) { foreach ($users as $user) { if ($user->getId() == $this->userId) { return $user; } } } } ?>
<?php class User { private $id; private $name; private $gender; private static $count = 0; public function __construct($name, $gender) { $this->name = $name; $this->gender = $gender; self::$count++; $this->id = self::$count; } public function getId() { return $this->id; } public function getName() { return $this->name; } public function getGender() { return $this->gender; } } ?>