2月26日/授業日

○授業内容

php オブジェクト指向記述の見方

 

<menu.php

class Menu {  設計図としてclass設定

private $name; それぞれのパーツのプロパティ大枠設定
private $price;
private $image;
private $orderCount = 0;
public static $count =4;

public function __construct($name, $price, $image) { 

・クラスを作る支持書の役割

 

・例として家を建てる場合classで設計図をつくるとプロパティやメソッドがあり、

 図面上でこれができるということがわかり準備はしているが実際に水道を出すと

 いったことができない。

 <data.php>にあるインスタンスを作る際にコンストラクタ(建築する)が呼ばれる

 ことによってインスタンスがコンストラクタを介して各プロパティに代入される。

   

 $this->name = $name;  
$this->price = $price;
$this->image = $image;
}

public function hello() {
echo '私は'.$this->name.'です';
}

public function getName() {
return $this->name;   

//nameプロパティを出しなさいという命令ー>private $nameに詰め込まれれている

インスタンスの配列から取り出される

一旦リターンで帰ってきてしてまた次のnameを取り出す。インスタンスが4つの為

同じ処理が4回行われる。

}

public function getImage() { 

return $this->image;
} 

//constructを介してprivate $imageに詰め込まれているインスタンスの配列3つ目がイメージなのでそこから取り出す、

一旦リターンで帰ってきてしてまた次のイメージを取り出す。インスタンスが4つの為

同じ処理が4回行われる。

 

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;
}

*******class定義から最後まで上記全てがオブジェクトになる********

 

<data.php

<?php
require_once('menu.php');

$juice = new Menu('JUICE', 600, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/juice.png');

$coffee = new Menu('COFFEE', 500, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/coffee.png');

$curry = new Menu('CURRY', 900, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/curry.png');

$pasta = new Menu('PASTA', 1200, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/pasta.png');

//・配列の中は 商品名、値段、画像と配列される。

インスタンスを作る際にnewができた瞬間にメモリが確保され、

生き物のように動くようになる。

$menus = array($juice, $coffee, $curry, $pasta);

?>

//インスタンスが配列の中に詰め込まれる。

 

wordpress

サーバーの設定がおかしいとのこと。他者のパソコンからではサイト表示がうまく

行かない。どこをどうすればうまく反映できるのか・・・今後の為にも覚えなけれ

ばならない。

 

○progate  phpオブジェクト指向

・クラスプロパティ

class Menu {

public static $count =4;   //static(和訳:静的な 静止の)をつけるとクラスプロパティとなる。数字は初期値

}

echo'メニュー'.Menu::$count.'品';  //Menu::$count クラスプロパティにアクセス

出力結果:メニューは4品

 

インスタンスが生成される毎にメニューが1増えるので上記メニューに1を足すには、

カウントの初期値を0としてコンストラクタ内で$countに1を足せばインスタンス

同数になる。

 

クラス内でクラスプロパティにアクセスするには、

クラス内でself::プロパティ名++;とすればインスタンスが増える毎にコンストラクタ内でクラスプロパティ$countに1を足している。

 

f:id:hinairo:20210226084002p:plain

<menu.php>
class Menu{

private static $count = 0;   //クラス外で$countの値を書き換えられないようにprivateに

public static functuion getCount(){ //クラスメソッドの定義

return self :$count;

}

}

<data.php>

$menu1 =new Menu('CURRY',....);

$menu2 = new Menu('PASTA'.....);

echo Menu::getCount(); //クラスメソッドの呼び出し

※$count ゲッターのように個々のインスタンスのデータに関係ない処理を行いたいときにはクラスメソッドを用います。

 

・継承(etxtends)の使い方

<menu.php> 

class Menu{

public function__construct($name,...){

$this->name = $name;

}

public function getName(){

return $this->name;

}

}

<drink.php>

class Drink extends Menu{              //Menuクラスを Drinkにクラスに継承

$coffee = new Drink('coffee',...);    //親クラスのコンストラクタが実行

 $coffee =getName();           //親クラスのメソッドの呼び出し

 

・独自プロパティ

<drink.php

class Drink extends Menu{

private $type;                         //Drinkclassの独自のプロパティを追加

public function getType(){     //独自のメソッドを定義

return $this->type;

}

public function setType($type){ //独自のメソッドを定義

$this -> type = $type;

}

}

<data.php>

$coffee = new Drink('COFFEE',....);

$coffee ->setType ('ホット');

//ドリンククラスのインスタンスなのでドリンククラスのメソッドを呼び出せる

 

 

f:id:hinairo:20210226112535p:plain

 

paiza

復習問題 pow(基数、乗数)で計算

復習問題 空港名表示 haneda ->hnd のように3文字にて出力

$str = str_split("japan");とすると配列に変換し(j,a,p,a,n,)となるので、

配列番号を指定 echo"$str[0]$str[3]$str[5];とすればjpnと出力できる。 

 

本の名言

潜在意識がなかなか受け入れてくれない時にテクニックを使うと良い。それは自分が思い浮かべている金額を必ず手にするとあなた自身で信じることだ。お金が自分のモノになるのは運命なのだと信じ込むのである。