PHPのインターフェースのサンプルです。
目次
サンプル | インターフェース |
クラスが複数のインターフェースを実装する | |
クラスがクラスの継承とインターフェースの実装を行う | |
インターフェースが他のインターフェースを継承する |
インターフェース
1.インターフェースの宣言
interface インターフェース名 { 変数 = 値; //定数 function メソッド名(引数); //抽象メソッド } |
- インターフェースの宣言は、「interface」を記述します。
- 定数と抽象メソッドを記述できます。
- インターフェースは他のインターフェースも継承できます。
2.インターフェースを実装したクラス
class クラス名 implements インターフェース名{ } |
- インターフェースを継承してクラスを定義することを「インターフェースを実装する」と言います。
- インターフェースを実装するクラスには、「implements」を記述します。
- インターフェースを実装したクラスはインターフェースで宣言されている抽象メソッドをオーバーライドする必要があります。
- 1つのクラスに複数のインターフェースを実装することができます。その場合カンマで区切って記述します。
- 以下は、PHPマニュアルのオブジェクト インターフェイスのリンクです。
http://php.net/manual/ja/language.oop5.interfaces.php
インターフェースのサンプルです。
<?php
interface InterfaceA
{
public const MOJI = "red";
public function printA();
}
class Color1 implements InterfaceA
{
public function printA(){
print self::MOJI;
}
}
$cr1 = new Color1();
print $cr1->printA(); //red
?>
2~6行目は、インターフェースです。
4行目の変数は定数です。
5行目は、抽象メソッドです。
7行目は、implementsを使用して3行目のインターフェースを実装しています。
9行目は、5行目の抽象メソッドをオーバーライドしています。
10行目のself::は静的プロパティ(変数)を指定するので使用しています。
クラスが複数のインターフェースを実装する
1つのクラスに複数のインターフェースを実装するサンプルです。
<?php
interface InterfaceA
{
public function printA();
}
interface InterfaceB
{
public function printB($cnt2);
}
class Class1 implements InterfaceA,InterfaceB
{
public function printA(){
print "a";
}
public function printB($c){
print ($c+1);
}
}
$cr1 = new Class1();
print $cr1->printA(); //a
print $cr1->printB(1); //2
?>
10行目は、2行目と6行目のインターフェースを実装しています。
クラスがクラスの継承とインターフェースの実装を行う
クラスがクラスの継承とインターフェースの実装を行うサンプルです。
<?php
interface InterfaceA
{
public function printA();
}
class ClassTest{
}
class Class1 extends ClassTest implements InterfaceA
{
public function printA(){
print "c";
}
}
$cr1 = new Class1();
print $cr1->printA(); //c
?>
8行目は、クラスを継承し、インターフェースを実装しています。
インターフェースが他のインターフェースを継承する
インターフェースが他のインターフェースを継承できます。
<?php
interface InterfaceA
{
public function printA();
}
interface InterfaceB extends InterfaceA
{
public function printB($cnt2);
}
class Class1 implements InterfaceB
{
public function printA(){
print "b";
}
public function printB($c){
print ($c+2);
}
}
$cr1 = new Class1();
print $cr1->printA(); //b
print $cr1->printB(1); //3
?>
6行目は、インターフェースがインターフェースを継承しています。
関連の記事
PHPクラスの仕組みと使い方のサンプル
PHP コンストラクタのサンプル
PHP クラスの継承の仕組みとサンプル
PHP オーバーライドのサンプル
PHP 抽象クラスと抽象メソッドのサンプル(abstract)