オブジェクト指向について

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 はメソッドの定義の中でのみ使用できる、特殊な変数です。

このときプロパティ名に$(ダラー)はつけません。

× $this->$number1   〇 $this->number1

 

インスタンスとは

クラスとは設計図だと説明しました。

しかし設計図(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】動作確認

フォームに身長と体重を入力します。

img01

送信ボタンを押したら Class に記述した BMI の計算がきちんと実行されているのがわかります。

img02

全てのソースはこちらになります。

 
以上です。

PHP おススメ教材(by Udemy)

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識