オブジェクト指向~インターフェース~
インターフェースはクラスで実装すべきメソッドを規格として定めるものです。
インターフェースでは定められているメソッドを必ず実装しなければなりません。
インターフェースを定義する
インターフェースではメソッドと定数を定義できます。
メソッドは名前と引数の形式だけを定義し、機能の実装は行いません。
アクセス権はpublicのみが設定可能です。
※指定を省略すると初期値のpublicが適用されるので指定する必要はありません。
インターフェースの定義
interface インターフェース名 {
const 定数 = 値 ;
function 関数名(引数,引数,...);
}
interface インターフェース名 {
const 定数 = 値 ;
function 関数名(引数,引数,...);
}
他のインターフェースを継承したインターフェース
interface 子インターフェース名 extends 親インターフェース名 {
const 定数 = 値 ;
function 関数名(引数,引数,...);
}
interface 子インターフェース名 extends 親インターフェース名 {
const 定数 = 値 ;
function 関数名(引数,引数,...);
}
インターフェースを採用する
インターフェースを採用するクラスでは、implementsでインターネットを指定します。継承と違って複数のインターフェースを採用出来ます。
インターフェースを採用するクラス
class クラス名 implements インターフェース名,インターフェース名,...{
//クラスのコード
}
class クラス名 implements インターフェース名,インターフェース名,...{
//クラスのコード
}
インターフェースを採用するクラスに親クラスがある場合
class クラス名 extends 親クラス名 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を返す
ゲームの実行結果
5ポイント消費した!!! 現在のHP45ポイント 9ポイント消費した!!! 現在のHP36ポイント 27ポイント消費した!!! 現在のHP9ポイント 12ポイント回復した 現在のHP21ポイント 32ポイント回復した 現在のHP53ポイント 0ポイント回復した 現在のHP53ポイント 19ポイント消費した!!! 現在のHP34ポイント 27ポイント消費した!!! 現在のHP7ポイント 20ポイント回復した 現在のHP27ポイント 35ポイント消費した!!! 現在の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";
?>