2021/12/19
LaravelやCakePHP といったフレームワークはオブジェクト指向で作られています。
Laravelをきちんと理解しようとするなら、まずはオブジェクト指向を理解しないといけません。
今回はオブジェクト指向についてのエントリーです。
クラスとは
オブジェクト指向についてネットで検索しました。
どうやらオブジェクト指向は 「クラス」 というものが基本になることがわかりました。
クラスとは何か?
よくPHPの学習サイトではクラスは設計図に例えられます。
オブジェクト指向とは設計図(クラス)からインスタンス(オブジェクト)を作ることを言います。
クラスは class を使用して、以下の書式で作成します。
class クラス名 { 実装したい処理 }
クラスが持つ変数をプロパティ と呼びます。
クラスが持つ関数をメソッドと呼びます。
class Math { //プロパティを定義 public $number1; public $number2; //メソッドを定義 function add() { return $this->number1 + $this->number2; } function minus() { return $this->number1 - $this->number2; } }
プロパティはpublic、private、protected (アクセス修飾子)で定義します。
public | どこからでもアクセスできる |
---|---|
protected | そのクラスと、サブクラスからしかアクセスできない |
private | そのクラスからしかアクセスできない |
クラスが持つ関数、いわゆるメソッドはfunction で定義します。
クラス内でプロパティやメソッドを参照するときは、$this という変数を使います。
$this はメソッドの定義の中でのみ使用できる、特殊な変数です。
このときプロパティ名に$(ダラー)はつけません。
インスタンスとは
クラスとは設計図だと説明しました。
しかし設計図(class)を作成しただけでは何も出来ません。
設計図から実体を作り出す必要があります。
この実体のことを 「インスタンス」 と呼びます。
上の例ではMathクラスを作成しました。
このMathクラスを利用するにはインスタンスを作成する必要があります。
インスタンスを作成するには new を使用します。
//Mathクラスのオブジェクトを作成 $math = new Math; //プロパティに値を代入 $math->number1 = 7; $math->number2 = 5; //メソッドを実行して結果を取得 $result1 = $math->add(); $result2 = $math->minus(); echo "足し算の結果は{$result1}、引き算の結果は{$result2}です。";
作成したインスタンス($math)は、クラスで定義したプロパティ($number1,$number2)とメソッド( add(),minus() )を持ちます。
プロパティやメソッドにアクセスするには、オブジェクトに対して -> (アロー演算子)を使用します。
このときプロパティ名に$(ダラー)はつけません。
× $math->$number1 〇 $math->number1
静的プロパティ・メソッド
クラスは基本的に、newでインスタンスを作成してから利用します。
しかし、staticキーワードを指定することで静的なプロパティ、メソッドが定義できるようになります。
静的なプロパティ、メソッドを定義するとインスタンスを生成せずに直接プロパティ、メソッドを呼び出すことができます。
静的プロパティ、メソッドを呼び出すときは::(スコープ演算子)を使います。
class Message { //メソッドを定義 static function hello() { return "こんにちは"; } static function bye() { return "さようなら"; } } //Messageクラスのメソッドを直接呼び出す。 $message1 = Message::hello(); $message2 = Message::bye(); echo "変数message1の内容は{$message1}、変数message2の内容は{$message2}です。";
出力結果は以下になります。
オブジェクト指向を理解するためのチュートリアル
オブジェクト指向を用いて、身長と体重を入力するとBMI(肥満度)が表示されるウェブアプリを作成します。
考え方・設計
フォームには身長・体重の項目を設定します。
入力したデータをもとに class 内部で BMI を計算します。
BMI の計算式は以下になります。
BMI = 体重(kg) ÷ 身長(m) ÷ 身長(m)
計算されたBMIのデータをもとに肥満度の判定をします。
これもclass内部で判定します。
判定基準は以下になります。
BMI | 肥満度の判定 |
---|---|
18.5未満 | 痩せている |
18.5 - 25 | 標準 |
25 - 30 | 肥満1度 |
30 - 35 | 肥満2度 |
35 - 40 | 肥満3度 |
40以上 | 肥満4度 |
フォームで入力したデータをもとにインスタンスを生成して BMI の計算をします。
その後、計算結果を表示させます。
手順
【1】Bootstrapの作成
【2】入力フォームの作成
【3】class の作成
【4】インスタンスの生成
【5】BMI計算結果を表示
【6】動作確認
【1】Bootstrapの作成
CDNでBootstrapを組み込みます。
まずはひな形を用意します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ページタイトル</title> <!--CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <!--JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <!--自作CSS --> <style type="text/css"> <!-- /*ここに調整CSS記述*/ --> </style> </head> <body> <!--↓ここから↓--> <!--内容--> <!--↑ここまで↑--> </body> </html>
【2】入力フォームの作成
<!--================================================= Form ==================================================--> <form action="cal.php" method="post" role="form"> <div class="form-group"> <label for="InputHeight">身長(cm)</label> <input type="text" name="height" class="form-control" id="InputHeight" placeholder="半角英数字のみ"> </div> <div class="form-group"> <label for="InputWeight">体重(kg)</label> <input type="text" name="weight" class="form-control" id="InputWeight" placeholder="半角英数字のみ"> </div> <button type="submit" class="btn btn-default">BMI計算</button> </form>
【3】class の作成
/*-------------------------------------------------- * Class作成 -------------------------------------------------*/ class Cal{ public $height; public $weight; /* * BMI計算関数 */ function bmi(){ #cmをmに変換 $height = $this->height/100; #BMI計算 $bmi = $this->weight/($height * $height); #小数点以下を四捨五入 $bmi = round($bmi); return "$bmi"; } /* * BMI判定関数 */ function hantei(){ #cmをmに変換 $height = $this->height/100; #BMI計算 $bmi = $this->weight/($height * $height); #小数点以下を四捨五入 $bmi = round($bmi,1); #BMI判定 if($bmi < 18.5){ $result = "低体重(やせ)"; }else if($bmi < 25){ $result = "標準"; }else if($bmi < 30){ $result = "肥満1度"; }else if($bmi < 35){ $result = "肥満2度"; }else if($bmi < 40){ $result = "肥満3度"; }else if($bmi >= 40){ $result = "肥満4度"; } return "$result"; } }
【4】インスタンスの生成
/*-------------------------------------------------- * インスタンス生成 -------------------------------------------------*/ $cal = new Cal(); $cal->height = htmlspecialchars($_POST['height']); $cal->weight = htmlspecialchars($_POST['weight']);
【5】BMI計算結果を表示
あなたのBMIは <span style="color:tomato; font-size:24px; font-weight:bold;"><?php echo $cal->bmi(); ?></span> です。 判定は <span style="color:tomato; font-size:24px; font-weight:bold;"><?php echo $cal->hantei(); ?></span> です。
【6】動作確認
フォームに身長と体重を入力します。
送信ボタンを押したら Class に記述した BMI の計算がきちんと実行されているのがわかります。
全てのソースはこちらになります。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。