PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのインターフェースとは?基本の使い方と特徴をサンプルコードで解説

本記事では、PHPのオブジェクト指向プログラミングにおいて重要な設計パターンのひとつである「インターフェース」の使い方について解説します。

インターフェースを使うと、クラスが必ず実装すべき公開メソッドを宣言できます。インターフェースにはメソッド名や引数などのシグネチャのみを定義し、実際の処理内容(実装)は記述しません。インターフェースを実装するクラスは、そこで宣言されたすべてのメソッドを必ず実装しなければなりません。

インターフェースの宣言方法はクラスとよく似ていますが、宣言時には class の代わりに interface キーワードを使用し、すべてのメソッドは処理内容を持たない状態で宣言します。

インターフェースの基本的な例

まずは簡単なサンプルコードで、インターフェースの定義と実装の流れを見てみましょう。

<?php
    interface MyInterface {
        public function getName();
        public function getAge();
    }
    class MyClass implements MyInterface {
        public function getName() {
            echo "My name A" . '<br>';
        }
        public function getAge() {
            echo "My Age 12";
        }
    }
    $obj = new MyClass;
    $obj->getName();
    $obj->getAge();
?>

出力結果

My name A
My Age 12

コードの解説

この例では、getName()getAge() という2つのメソッドを中身なしで宣言したインターフェース MyInterface を定義しています。その後、クラス MyClassimplements キーワードでこのインターフェースを実装し、必要に応じて各メソッドに具体的な処理を記述しています。

インターフェースの主な特徴

  • インターフェースのメソッドは処理内容を持たないため、すべて抽象メソッドとして扱われます。
  • インターフェース内のすべてのメソッドは、public(公開)の可視性を持つ必要があります。
  • クラスは親クラスを1つしか継承(extends)できませんが、1つ以上の複数インターフェースを実装(implements)できます。
  • インターフェースの中に変数(プロパティ)を定義することはできません。ただし、定数(const)は定義可能です。

インターフェースで多重継承を実現する

1つのクラスが継承できる親クラスは1つだけですが、インターフェースなら複数を実装できます。この特性を利用すると、PHPでも多重継承に近い設計を実現できます。次の例で確認してみましょう。

<?php
    interface a {
        public function printData();
    }
    interface b {
        public function getData();
    }
    interface c extends a, b {
        public function addData();
    }
    class d implements c {
        public function printData() {
            echo "I am printing";
        }
        public function getData() {
            echo "I am reading data";
        }
        public function addData() {
            echo "I am adding";
        }
    }
    $myobj = new d();
    $myobj->printData();
    $myobj->addData();
?>

出力結果

I am printing
I am adding

コードの解説

ここでは3つのインターフェース(abc)を宣言しています。ポイントは、インターフェース cextends を使ってインターフェース ab を同時に継承している点です。

クラス d はインターフェース c のみを実装していますが、cab を継承しているため、3つのインターフェースで宣言されたすべてのメソッド(printData()getData()addData())が実装対象となります。このように、インターフェースを組み合わせることで、多重継承のような柔軟なクラス設計が可能になります。

まとめ

インターフェースは「何をするか」を定義し、「どうやるか」を実装クラスに委ねる仕組みです。メソッドの中身を持たない代わりに、実装すべき契約を明確にできるため、チーム開発や大規模プロジェクトで一貫性のある設計を行ううえで非常に役立ちます。ぜひ実際のコードで活用してみてください。

  1. PHPのfinalクラスとfinalメソッドの使い方を徹底解説

    はじめに 「final」キーワードは、PHP 5から導入されたオブジェクト指向プログラミングに関連する機能です。finalを使うことで、クラスの継承やメソッドのオーバーライドを禁止できます。 finalを理解するための前提知識:継承とは finalを学ぶ前に、「継承(インヘリタンス)」の概念をしっかり理解しておく必要があります。 継承とは、既存のクラス(親クラス)をもとに、新しいクラス(子クラス)を作成する仕組みです。子クラスは親クラスのプロパティやメソッドを受け継ぎます。さらに、子クラス側で親クラスのメソッドを再定義(オーバーライド)することで、元の動作を上書きすることも可能です。 しかし

  2. Javaのインターフェースとは?基本構文からクラスとの違いまで徹底解説

    Javaのインターフェースとはインターフェースは、Javaにおける参照型の一つで、クラスとよく似た性質を持っています。その本体は抽象メソッドの集まりであり、クラスがインターフェースを実装することで、その抽象メソッドを引き継ぐ仕組みになっています。抽象メソッドに加えて、インターフェースには定数、デフォルトメソッド、静的メソッド、ネストされた型を含めることも可能です。ただし、メソッドの本体(処理内容)が存在するのは、デフォルトメソッドと静的メソッドのみです。インターフェースの記述方法はクラスと似ていますが、両者の役割は異なります。クラスがオブジェクトの属性や振る舞いを記述するのに対し、インターフェ