期待する動作:
index.phpのa要素ドラゴン、かめ、かばを押す。
クエリ情報として、Pokemonクラスの$nameを渡す
↓
show.phpに飛ぶ。
まず、クエリ情報を受け取って、$pokemonNameに代入する。
次にPokemonクラスのfindByNameというクラス関数を使って、data.phpの$pokemonsの中から、クエリ情報と一致する要素を探して、$pokemonに代入する。最後にReviewクラスのgetReviewsを使って、$reviews(data.php)の中から、$pokemonの$nameと一致する要素を取得する。
そして、.review-wrapper h2の下にReviewの$body(キャラクターについてのコメント)を表示したい。
現在の状況:
紐ずけがされていないのか$bodyが表示されません。どうしたら、$bodyを表示できるようになるでしょうか??
エラー文:
Fatal error: Uncaught Error: Call to a member function getReviewedPok() on null in /Users/nobuhiromori/Desktop/practice_php/pokemon.php:23 Stack trace: #0 /Users/nobuhiromori/Desktop/practice_php/show.php(7): Pokemon->getReviews(Array) #1 {main} thrown in /Users/nobuhiromori/Desktop/practice_php/pokemon.php on line 23
回答お願いいたします。
php
1<!-- index.php --> 2<?php 3require_once('pokemon.php'); 4require_once('data.php'); 5?> 6<!DOCTYPE html> 7<html> 8 <head> 9 <meta charset="utf-8"> 10 <title>My test page</title> 11 <link rel="stylesheet" href="stylesheet.css"> 12 <link rel="stylesheet" href="stylesheet.min.css"> 13 </head> 14 <body> 15 <div class="top-wrapper"> 16 <h1>好きなキャラクターアンケート</h1> 17 <div class="pokemons"> 18 <?php foreach($pokemons as $pokemon): ?> 19 <div class="pokemon"> 20 <div> 21 <a href="show.php?name=<?php echo $pokemon->getName() ?>"><?php echo $pokemon->getName() ?></a> 22 </div> 23 </div> 24 <?php endforeach ?> 25 </div> 26 </div> 27 </body> 28</html>
php
1// pokemon.php 2<?php 3 class Pokemon { 4 private $name; 5 6 public function __construct($name) { 7 $this->name = $name; 8 } 9 10 public function getName() { 11 return $this->name; 12 } 13 14 public static function findByName($pokemons, $name){ 15 foreach($pokemons as $pokemon) { 16 if ($name == $pokemon->getName()) { 17 return $pokemon; 18 } 19 } 20 } 21 22 public function getReviews($reviews) { 23 $reviewForShow = array(); 24 foreach($reviews as $review) { 25 if ($this->name == $review->getReviewedPok()) { 26 $reviewForShow[] = $review; 27 } 28 } 29 return $reviewForShow; 30 } 31 } 32?>
php
1// pokemon.php 2<?php 3 class Pokemon { 4 private $name; 5 6 public function __construct($name) { 7 $this->name = $name; 8 } 9 10 public function getName() { 11 return $this->name; 12 } 13 14 public static function findByName($pokemons, $name){ 15 foreach($pokemons as $pokemon) { 16 if ($name == $pokemon->getName()) { 17 return $pokemon; 18 } 19 } 20 } 21 22 public function getReviews($reviews) { 23 $reviewForShow = array(); 24 foreach($reviews as $review) { 25 if ($this->name == $review->getReviewedPok()) { 26 $reviewForShow[] = $review; 27 } 28 } 29 return $reviewForShow; 30 } 31 32 33 } 34?> 35
php
1//data.php 2<?php 3 4require_once('review.php'); 5 6$hito = new Pokemon('ドラゴン'); 7$zeni = new Pokemon('かめ'); 8$fushi = new Pokemon('かば'); 9 10$pokemons = array($hito, $zeni, $fushi); 11 12$review1 = new Review($hito->getName(), 'ドラゴンです'); 13$review2 = new Review($zeni->getName(), '亀です'); 14$review3 = new Review($fushi->getName(), 'かばです'); 15 16 17$reviews = array( 18 $reivew1, 19 $reivew2, 20 $reivew3, 21 22); 23 24 25?> 26
php
1// review.php 2 3<?php 4 5class Review { 6 private $reviewedPok; 7 private $body; 8 9 public function __construct($reviewedPok, $body){ 10 $this->reviewedPok = $reviewedPok; 11 $this->body = $body; 12 } 13 14 public function getReviewedPok(){ 15 return $this->reviewedPok; 16 } 17 18 public function getBody(){ 19 return $this->body; 20 } 21} 22 23 ?>
php
1<!-- show.php --> 2<?php 3require_once('pokemon.php'); 4require_once('data.php'); 5 6$pokemonName = $_GET['name']; 7$pokemon = Pokemon::findByName($pokemons, $pokemonName); 8$pokemonReviews = $pokemon->getReviews($reviews); 9?> 10<!DOCTYPE html> 11<html> 12 <head> 13 <meta charset="utf-8"> 14 <title>My test page</title> 15 <link rel="stylesheet" href="stylesheet.css"> 16 <link rel="stylesheet" href="stylesheet.min.css"> 17 </head> 18 <body> 19 <div class="top-wrapper"> 20 <h1>好きなキャラクターアンケート</h1> 21 <div class="pokemons"> 22 23 <div class="pokemon"> 24 25 <div> 26 <p><?php echo $pokemon->getName() ?></p> 27 </div> 28 </div> 29 </div> 30 31 <div class="review-wrapper"> 32 <h2>レビュー</h2> 33 <?php foreach($pokemonReviews as $review): ?> 34 <p><?php echo $review->getBody() ?></p> 35 <?php endforeach ?> 36 <a href="index.php">戻る</a> 37 </div> 38 39 40 </div> 41 <script type="text/javascript" src="script.js"></script> 42 </body> 43</html>
css
1/* stylesheet.min.css */ 2.top-wrapper{background-color:gray;height:auto;margin:0 auto}.top-wrapper h1{color:white;text-align:center}.pokemons .pokemon .star{width:14px}.pokemons .pokemon .pokemon-image{width:150px;height:150px}
php
1/* stylesheet.scss */ 2.top-wrapper { 3 background-color: gray; 4 height: auto; 5 6 h1 { 7 color: white; 8 text-align: center; 9 } 10 margin: 0 auto; 11 12} 13 14.pokemons { 15 .pokemon { 16 .star { 17 width:14px; 18 } 19 .pokemon-image { 20 width: 150px; 21 height: 150px; 22 } 23 } 24}
回答1件
あなたの回答
tips
プレビュー