オブジェクト指向~インターフェース~

PHPのシンタックス

  1. HOME
  2. OOPインターフェース

オブジェクト指向~インターフェース~

インターフェースはクラスで実装すべきメソッドを規格として定めるものです。
インターフェースでは定められているメソッドを必ず実装しなければなりません。


インターフェースを定義する
インターフェースではメソッドと定数を定義できます。
メソッドは名前と引数の形式だけを定義し、機能の実装は行いません。
アクセス権はpublicのみが設定可能です。
※指定を省略すると初期値のpublicが適用されるので指定する必要はありません。

インターフェースの定義
interface インターフェース名 {
 const 定数 = 値 ;
 function 関数名(引数,引数,...);
}
他のインターフェースを継承したインターフェース
interface 子インターフェース名 extends 親インターフェース名 {
 const 定数 = 値 ;
 function 関数名(引数,引数,...);
}


インターフェースを採用する
インターフェースを採用するクラスでは、implementsでインターネットを指定します。継承と違って複数のインターフェースを採用出来ます。

インターフェースを採用するクラス
class クラス名 implements インターフェース名,インターフェース名,...{
 //クラスのコード
}
インターフェースを採用するクラスに親クラスがある場合
class クラス名 extends 親クラス名 implements インターフェース名,インターフェース名,...{
 //クラスのコード
}

Gameインターフェースの作成

Gameのインターフェース

<?php
interface Game
{
  function newGame($point); //引数が1個ある
  function play();
  function isAlive(): bool;
}
//論理値(bool、boolean)とは、真か偽かを表す変数の型のことです。真の場合は「true」、偽の場合は「false」の値をそれぞれ持ちます

インターフェースの指示はnewGame()の、持ち点の$pointで新しいゲームの開始、play()でゲームの実行、isAlive()でゲーム結果が分かるようにtrue/falceで返す3つです。



Gameインターフェースを採用したHpGameクラス

<?php
require_once("Game.php");

class HpGame implements Game
{
  public $hitPoint;

  function __construct($point = 50)
  {
    $this->newGame($point); //インスタンスの作成と同時にゲーム開始
  }


  /*インターフェース指定メソッド*/

  public function newGame($point = 50) //ニューゲーム
  {
    $this->hitPoint = $point;
  }

  public function play() //ゲーム開始
  {
    $num = random_int(0, 50);
    if ($num % 2 == 0) { //割り切れる偶数値
      echo "{$num}ポイント回復した", "\n";
      $this->hitPoint += $num;
    } else {
      echo "{$num}ポイント消費した!!!", "\n";
      $this->hitPoint -= $num;
    }
    echo "<b>";
    echo "現在のHP{$this->hitPoint}ポイント", "\n";
    echo "</b>";
  }

  public function isAlive(): bool //勝敗のチェック
  {
    return ($this->hitPoint > 0);
  }
}

Gameインターフェースの指定に基づいて、newGame()、play()、isAlive()の3つのメソッドを実装しています。
内容は0~50の乱数$numを作り、偶数なら$hitPointに加算、奇数なら減算しています。そして、isAlive()で現在のポイントの$hitPointが0より多ければtrue、0以下はfalceを返す



ゲームの実行結果

15ポイント消費した!!!
現在のHP35ポイント
36ポイント回復した
現在のHP71ポイント
0ポイント回復した
現在のHP71ポイント
38ポイント回復した
現在のHP109ポイント
23ポイント消費した!!!
現在のHP86ポイント
26ポイント回復した
現在のHP112ポイント
37ポイント消費した!!!
現在のHP75ポイント
45ポイント消費した!!!
現在のHP30ポイント
11ポイント消費した!!!
現在のHP19ポイント
27ポイント消費した!!!
現在のHP-8ポイント
ゲーム終了
<?php
require_once("HpGame.php");

$player = new HpGame();
for ($i = 0; $i < 10; $i++) { //10回プレイ
  $player->play();
  if (!$player->isAlive()) { //falseになったらbreakする
    break;
  }
}
echo "ゲーム終了", "\n";
?>