2021/12/19
LaravelやCakePHP といったフレームワークはオブジェクト指向で作られています。
Laravelをきちんと理解しようとするなら、まずはオブジェクト指向を理解しないといけません。
今回はオブジェクト指向についてのエントリーです。
クラスとは
オブジェクト指向についてネットで検索しました。
どうやらオブジェクト指向は 「クラス」 というものが基本になることがわかりました。
クラスとは何か?
よくPHPの学習サイトではクラスは設計図に例えられます。
オブジェクト指向とは設計図(クラス)からインスタンス(オブジェクト)を作ることを言います。
クラスは class を使用して、以下の書式で作成します。
1 2 3 | class クラス名 { 実装したい処理 } |
クラスが持つ変数をプロパティ と呼びます。
クラスが持つ関数をメソッドと呼びます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 | //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キーワードを指定することで静的なプロパティ、メソッドが定義できるようになります。
静的なプロパティ、メソッドを定義するとインスタンスを生成せずに直接プロパティ、メソッドを呼び出すことができます。
静的プロパティ、メソッドを呼び出すときは::(スコープ演算子)を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 の計算式は以下になります。
1 | 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を組み込みます。
まずはひな形を用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <! 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 --> <!--自作CSS --> < style type = "text/css" > <!-- /*ここに調整CSS記述*/ --> </ style > </ head > < body > <!--↓ここから↓--> <!--内容--> <!--↑ここまで↑--> </ body > </ html > |
【2】入力フォームの作成
1 2 3 4 5 6 7 8 9 10 11 12 | <!--================================================= 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 の作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | /*-------------------------------------------------- * 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】インスタンスの生成
1 2 3 4 5 6 | /*-------------------------------------------------- * インスタンス生成 -------------------------------------------------*/ $cal = new Cal(); $cal ->height = htmlspecialchars( $_POST [ 'height' ]); $cal ->weight = htmlspecialchars( $_POST [ 'weight' ]); |
【5】BMI計算結果を表示
1 2 | あなたの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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。