PHP - クラス - インターフェース
公開日:2020-12-22 更新日:2020-12-22
[PHP]
1. 概要
インターフェースは、メソッドのメソッド名、引数、戻り値だけを定義したものです。
メソッドの処理は定義しません。
抽象メソッドだけを定義したものと考えても良いです。
インターフェースは、クラスに指定することができ、
指定されたクラスは、インターフェースが持つメソッドを実装する必要があります。
これにより、各クラスの処理内容が異なっても、同じインターフェースを持っているクラスのオブジェクトであれば、利用者は同じように扱うことができます。
例えば自動車の場合、車種(クラス)が異なると、性能(処理内容)が異なりますが、
利用者は、車の使い方(インターフェース)だけ知っていれば、どんな車種の車でも運転することができるのと同じです。
インターフェースは次のように定義します。
インターフェースのメソッドは、public にする必要があります。
他の言語では、省略することが多いです。あえて public と付けると、エラーになる場合もあります。
クラスは、インターフェースを複数持つことができます。
インターフェースは、インターフェースから継承することもできます。
メソッドの処理は定義しません。
抽象メソッドだけを定義したものと考えても良いです。
インターフェースは、クラスに指定することができ、
指定されたクラスは、インターフェースが持つメソッドを実装する必要があります。
これにより、各クラスの処理内容が異なっても、同じインターフェースを持っているクラスのオブジェクトであれば、利用者は同じように扱うことができます。
例えば自動車の場合、車種(クラス)が異なると、性能(処理内容)が異なりますが、
利用者は、車の使い方(インターフェース)だけ知っていれば、どんな車種の車でも運転することができるのと同じです。
インターフェースは次のように定義します。
インターフェースのメソッドは、public にする必要があります。
他の言語では、省略することが多いです。あえて public と付けると、エラーになる場合もあります。
interface インターフェース名 {
function メソッド名1(引数1, 引数2, ... 引数n);
function メソッド名2(引数1, 引数2, ... 引数n);
function メソッド名3(引数1, 引数2, ... 引数n);
}
クラスにインターフェースを指定する場合は、implements を使います。class クラス名 implements インターフェース名 {
public function メソッド名1(引数1, 引数2, ... 引数n) {
処理;
}
public function メソッド名2(引数1, 引数2, ... 引数n) {
処理;
}
public function メソッド名3(引数1, 引数2, ... 引数n) {
処理;
}
}
クラスは、インターフェースを複数持つことができます。
class クラス implements 子インターフェース1, 子インターフェース2 { }
インターフェースは、インターフェースから継承することもできます。
interface 親インターフェース { }
interface 子インターフェース extends 親インターフェース { }
class クラス implements 子インターフェース { }
2. 使用例
加算クラス(Add)と減算クラス(Substract)は、 ICalc と言うインターフェースを実装しているため、
利用者は calc() と言うメソッドで、クラスを意識せずに計算を行うことができます。
利用者は calc() と言うメソッドで、クラスを意識せずに計算を行うことができます。
interface ICalc {
function calc($v1, $v2);
}
class Add implements ICalc {
public function calc($v1, $v2) {
return $v1 + $v2;
}
}
class Substract implements ICalc {
public function calc($v1, $v2) {
return $v1 - $v2;
}
}
$objAdd = new Add();
var_dump( $objAdd->calc(3, 5) ); // 8
$objSub = new Substract();
var_dump( $objSub->calc(3, 5) ); // -2
実行結果int(8)
int(-2)