【PHP】HTMLに埋め込む、ファイルを分ける、カプセル化する(ゲッター・セッター)

HTMLに埋め込む書き方
 
<?php
$menus = array($juice,$coffee,$curry,$pasta);
?>
 
<div class="menu-items">
  <?php foreach ($menus as $menu):?>
  <h3><?php echo $menu->name ?></h3>
<?php endforeach ?>
</div>
foreach($menus as $menu){
  echo $menu->name ;
}
とする代わりに、{を:に、}をendforeachに書き換えている。
※endfor, endif, endwhile でも同様に書き換える。
 
 
 
ファイルを分ける
 
require_onceを用いると、別のphpファイルを読み込むことができる
require_onceで読み込んだファイル内で定義されているクラスや変数を、require_onceを記述したファイル内で使うことができる。
 
menu.php
 
<?php
class Menu{
}
?>
 
data.php
 
<?php
require_once('menu.php');
$sushi = new Menu('SUSHI'); //menu.phpで定義したクラスを使える
?>
 
 
 
HTMLにメソッドを埋め込む
 
<?php
class Menu{
 public $price;
public function getTaxIncludedPrice(){
return floor($this->price*1.1);
       //priceかける1.1をして、小数点以下を切り捨てるfloor関数
}
}
?>
 
<p class="price">¥<?php echo$menu->getTaxIncludedPrice() ?>(税込)</p>
//メソッド名()のあとの;は省略
 
 
 
 
クラスを作る際には、public/privateを分けて作成する。
 ・他の人がそのクラスを使いやすいよう、公開する機能
   →publicで定義 (例:値段を取得する機能)
 ・クラスの外では使って欲しくないので、隠す機能
   →privateで定義 (例:値段を直接変更する機能)
 
※基本的にプロパティはprivateにする。
 
privateにするとプロパティの値をクラスの外から取り出すことができなくなる。
そこで、プロパティの値を返すだけのメソッドを定義する。
このようなメソッドを「ゲッター」といい、「getプロパティ名」のように命名する。
 
<?php
class Menu{
private $image;
public function getImage(){
return $this->image;
}
}
<img src="<?php echo $menu->getImage() ?>">
//imgタグに埋め込む場合、""で囲むことにも注意
 
 
 
セッター
 
プロパティのアクセス権をprivateにすると、プロパティの値をクラスの外から変更できなくなる。
そこで、プロパティの値を変更するメソッドを定義する。
このようなメソッドを「セッター」といい、「setプロパティ名」のように命名する。 
 
<?php
class Menu {
private $orderCount = 0; //プロパティの初期値を0に設定
public function getOrderCount(){
   //orderCountプロパティのゲッターを定義
return $this->orderCount;
   //orderCountプロパティをreturenする
}   
public function setOrderCount($orderCount){
   //orderCountプロパティのセッターを定義
$this->orderCount =$orderCount;
}    //引数を$orderCountとするorderCountプロパティに$orderCountを代入する。
}
 
$juice->setOrderCount(2); //セッターを用いて引数2をセット
  //$juice->orderCount = 2;だと、privateのためアクセスできない
?>
 
 
<p>注文数: <?php echo $menu->getOrderCount(); ?></p>
     //ゲッターを用いてorderCountプロパティを表示する
 
 
 
プロパティの初期値
 
プロパティを定義する際、初期値を設定することができる。
private $orderCount = 0;