#9月1~2日 PHP
今回の3章は画像のようなページを作ることが目標
・メニュー4品の4の部分はメニュー数に合わせて変わるように
インスタンスが生成されるたびに1加算し、その結果を数字として表示するように
・飲み物は「アイス・ホットの情報」、食べ物は「辛さの情報」が
それぞれ表示されるようにファイルを分けて定義
続けて4章ですが
・商品名をクリックで飛べるリンク先ページの生成
・クリックした商品に合わせたレビューページの作成
・レビュー者情報が重複しないような仕組みの構築
いやぁ…ほんと、これ難しすぎです…。
## 個人的なメモ
クラスプロパティ
個々のインスタンスではなく、クラスが持つデータ(クラスプロパティ)
の定義とアクセス方法について
<?php
class Menu {
//クラスプロパティを定義する場合は「static クラスプロパティ名」とする
//ここのインストラクタに関与させない場合には、staticをつける
private static $count = 0 ;
//クラス内でクラスプロパティにアクセスする場合は「self::$クラスプロパティ名」とする
self::$count ++ ;
}
?>
<?php
//クラスプロパティにアクセスする クラス名::$クラスプロパティ名
echo Menu::$count
?>
継承した親クラスのメソッドの呼び出し(オーバーライド)
<?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」を使用して閉じる
// $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.クエリ情報に入っている内容によって、表示させる内容を変えるため(たぶん)
<a href= "show.php?name= <?php echo $menu->getName()?> " >
<?php echo $menu->getName() ?>
</a>
<?php
// クエリ情報の値(?以降の情報)を受け取るには、$_GET['キー名']で定義する。
$menuName = $_GET['name'] ;
// 第2引数にはクエリ情報に入力された商品名が入り、第1引数は配列化されたmenusの値が順番に入る
// findByNameのクラスメソッドでは、クエリ情報と配列の一致した値を戻り値としている
$menu = Menu::findByName($menus, $menuName);
?>
<?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 ;
}
}
?>