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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。



