LoginSignup
4
3

More than 3 years have passed since last update.

【初心者】PHP interface

Last updated at Posted at 2021-04-19

はじめに

phpでオブジェクト指向プログラミングを学んでいる初学者です。interfaceについてまとめてみました。(備忘録)

interface基本ルール

・インターフェイスをimplements(実装)したクラスは、class <クラス名> implements <インターフェイス名>となる。
・インターフェイスで定義されたメソッドは必ず書かなくてはならない。
・インターフェイス内に処理は書けない。
・インターフェイスを複数implements(実装)することができる。
・インターフェイスはクラスではないため、インスタンス化ができない。

interface RockPaperScissors
{
    //インターフェイスでは、実装を伴うメソッドやプロパティの宣言はできない
    public function rock();
    public function paper();
    public function scissors();
}

class Battle implements RockPaperScissors
{
    public function rock()
    {
        echo 'グー';
    }

    public function  paper()
    {
        echo 'パー';
    }

    public function scissors()
    {
        echo 'チョキ';
    }
}

$battle = new Battle();
$battle->rock();        //グー
$battle->paper();       //パー
$battle->scissors();    //チョキ

インターフェイスをimplements(実装)したクラスに、インターフェイスで宣言したメソッドを書かなかった場合

public function scissors()をコメントアウトすると、

interface RockPaperScissors
{
    public function rock();
    public function paper();
    public function scissors();
}

class Battle implements RockPaperScissors
{
    public function rock()
    {
        echo 'グー';
    }

    public function  paper()
    {
        echo 'パー';
    }

    //public function scissors()
    //{
    //    echo 'チョキ';
    //}
}

$battle = new Battle();
$battle->rock();        //グー
$battle->paper();       //パー
$battle->scissors();    //エラー!!!

Fatal error: Class Product contains 1 abstract method and must therefore be declared abstract or implement the remaining methods ...
インターフェイスで宣言したメソッドを書かなかったため(コメントアウト)、エラーが発生。。

extendsとimplementsでクラスとインターフェイスの併用もできる

例えば、class <クラス名> extends <親クラス名> implements <インターフェイス名>のような記述が可能。

interface RockPaperScissors
{
    public function rock();
}

class Fake
{
    public function fakeAction()
    {
        echo '出さない';
    }
}

class Battle extends Fake implements RockPaperScissors
{
    public function rock()
    {
        echo 'グー';
    }
}

$battle = new Battle();
$battle->rock();        //グー
$battle->fakeAction();  //出さない
4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3