LoginSignup
0
1

More than 5 years have passed since last update.

学習記録:PHP その2

Last updated at Posted at 2018-09-03

9月1~2日 PHP

今回の3章は画像のようなページを作ることが目標

c1d9fa26-e45e-44bf-b15c-fb40be54aa98.jpg

・メニュー4品の4の部分はメニュー数に合わせて変わるように
 インスタンスが生成されるたびに1加算し、その結果を数字として表示するように
・飲み物は「アイス・ホットの情報」、食べ物は「辛さの情報」が
 それぞれ表示されるようにファイルを分けて定義

続けて4章ですが

3419d356-c455-4d2f-b339-7d460a39fd67.jpg

・商品名をクリックで飛べるリンク先ページの生成
・クリックした商品に合わせたレビューページの作成
・レビュー者情報が重複しないような仕組みの構築

いやぁ…ほんと、これ難しすぎです…。

 個人的なメモ

クラスプロパティ
個々のインスタンスではなく、クラスが持つデータ(クラスプロパティ)
の定義とアクセス方法について

menu.php
  <?php
class Menu { 
//クラスプロパティを定義する場合は「static クラスプロパティ名」とする
//ここのインストラクタに関与させない場合には、staticをつける
private static $count = 0 ; 
//クラス内でクラスプロパティにアクセスする場合は「self::$クラスプロパティ名」とする
self::$count ++ ;
}
  ?>
index.php
<?php 
  //クラスプロパティにアクセスする クラス名::$クラスプロパティ名
  echo Menu::$count 
?>

継承した親クラスのメソッドの呼び出し(オーバーライド)

drink.php
  <?php
//別のクラスを継承する場合は 「class 子クラス名 extends 親クラス名」とする 
 class Drink extends Menu {
  private $type;
  public function __construct($name, $price, $image, $type) {
    // 親クラスのコンストラクタを呼び出す場合は「parent::メソッド名」
    parent::__construct($name, $price, $image) ;
    $this->type = $type;
  }
  ?>

PHP内でifやforを使用する場合
if文、for文、while文、witch文foreach文を書く場合は、
「endif」「endfor」「endwhile」「endswitch」「endforeach」を使用して閉じる

index.php
// $menuで呼び出されたクラスがドリンクであれば実行したい
// → instanceof で判定させる
//改行を含まない<?php ?>の場合は、<?php : ?>のようにコロンを使用する
<?php if ($menu instanceof Drink): ?>
 <p class="menu-item-type"><?php echo $menu->getType() ?></p>
//<?php else : ?>で条件分岐をさせているが、:を使用することに注意
<?php else : ?>
 <p><?php echo '辛さ:'. $menu->getSpiciness() ?></p>
//<?php if ?>を閉じるために<?php endif ?>を置く。:は使用しない。
<?php endif ?>

クエリ情報の追加
URLの末尾の「?」以降に「キー名=値」の形で簡単な情報をのせることができる。
これをクエリ情報といい、クエリ情報を用いてリンク先のページに情報を渡すことができます。

Q.なぜ情報を渡す必要があるのか?
A.クエリ情報に入っている内容によって、表示させる内容を変えるため(たぶん)

index.php
<a href= "show.php?name= <?php echo $menu->getName()?> " >
 <?php echo $menu->getName() ?>
</a>
show.php
<?php
// クエリ情報の値(?以降の情報)を受け取るには、$_GET['キー名']で定義する。
 $menuName = $_GET['name'] ;
// 第2引数にはクエリ情報に入力された商品名が入り、第1引数は配列化されたmenusの値が順番に入る
// findByNameのクラスメソッドでは、クエリ情報と配列の一致した値を戻り値としている
 $menu = Menu::findByName($menus, $menuName);
?> 
show.php
<?php
class Menu {

//getreviewsに$reviewsForMenuの値が戻り値として入る。
  public function getReviews($reviews) {
// 空の配列
    $reviewsForMenu = array() ;
    foreach($reviews as $review) {
      if ($review->getMenuName() == $this->name) {
// $reviewsForMenu[]の配列の末尾に値を追加する。
//最終的に$reviewsForMenuの配列には、特定の商品名のreviewがすべて入った状態になる。
        $reviewsForMenu[] = $review ;
      }
    }
   return $reviewsForMenu ;
   } 
}
?>
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1