PHPにおける抽象クラスとインターフェースの主な違いは、 抽象クラスは抽象メソッドと非抽象メソッドから構成できるのに対し、 インターフェースはすべてのメソッドに実装がないことです。
PHP はサーバーサイドスクリプト言語です。
ウェブ開発で最も人気のある言語の一つです。
PHP では、ファイルの処理、フォームの処理、メールの送信、ファイルのアップロード、 MySQL のような DBMS とアプリケーションの接続、その他多くのタスクを行うことができます。
ZendやCode IgniterのようなフレームワークはPHPをベースにしています。
PHPはオブジェクト指向プログラミング(OOP)もサポートしています。
OOPの主要なコンセプトの1つは抽象化です。
これは、実装を隠し、ユーザーに機能のみを表示するのに役立ちます。
抽象化を実現する方法として、抽象クラスとインターフェイスがあります。
PHPの抽象クラスとは
抽象メソッドとは、実装を持たないメソッドのことです。
抽象クラスは、少なくともひとつの抽象メソッドを持つクラスです。
抽象メソッドだけでなく、非抽象メソッドも持つことができます。
抽象クラスを宣言するには、キーワード “abstract” を使用します。
また、抽象クラスを継承するクラスは、そのクラスの抽象メソッドの実装を提供する必要があります。
プログラマは抽象クラスを使用してオブジェクトを作成することはできませんが、抽象クラスを継承したクラスからオブジェクトを作成することは可能です。
上の図では、Shapeは抽象クラスです。
draw という抽象メソッドと、display という非抽象メソッドを持っています。
三角形クラスは Shape を継承しています。
つまり、triangleクラスは抽象メソッドdrawの実装を提供します。
19行目で、Triangleのオブジェクトが生成されています。
20行目では、そのオブジェクトを使って draw メソッドが呼び出されています。
したがって、drawメソッドが実行され、コンソールに “Triangle “が表示されます。
PHPにおけるインターフェースとは
インターフェースに含まれるメソッドはすべて抽象メソッドです。
言い換えると、関数のプロトタイプか、実装のない関数しか含まれていません。
プログラマは、インターフェイスを使用してオブジェクトを作成することは できません。
インターフェイスは、”interface” キーワードで宣言します。
インターフェイスに含まれるメソッドが抽象的であっても、プログラマはそれらを abstract キーワードで宣言しません。
その代わり、それらのメソッドは public visibility スコープを持たなければなりません。
インターフェイスを実装したクラスは、その抽象的なメソッドの実装をすべて提供しなければなりません。
図2: インターフェースを実装したPHPプログラム1
上のプログラムでは、Shapeはインターフェイスです。
draw というメソッドを持っています。
しかし、実装はありません。
Triangle クラスは Shape を継承しています。
Triangleクラスはdrawメソッドの実装を提供します。
16行目で、Triangle オブジェクトのオブジェクトが作成されています。
17行目では、そのオブジェクトを使ってdrawメソッドを呼び出しています。
したがって、drawメソッドが実行され、コンソールに「Triangle」が表示されます。
さらに、インターフェースは、多重継承の実装にも役立ちます。
多重継承とは、あるクラスが複数のクラスの属性やメソッドを使用できるようにすることです。
図3: インターフェイスを用いたPHPプログラム
インターフェイスAはメソッドmethodAを持ちます。
同様に、インターフェイスBはメソッドmethodBを持っています。
これらのメソッドは関数プロトタイプです。
言い換えれば、これらのメソッドは実装を持ちません。
Test クラスはインターフェイス A と B を実装しているので、このクラスはメソッド A とメソッド B の実装を提供します。
また、Testクラスは、methodTestという独自のメソッドを持っています。
26行目、Testのオブジェクトを生成しています。
そして、そのオブジェクトを使って、methodA, method, methodTestを呼び出しています。
PHPにおける抽象クラスとインターフェイスの違い
定義
PHP における抽象クラスとは、abstract キーワードで宣言されたクラスであり、 抽象メソッドと非抽象メソッドの集合体であることを意味します。
これに対して、PHP のインターフェイスは参照型であり、実装や関数のプロトタイプを持たない メソッドの集合体です。
したがって、これがPHPにおける抽象クラスとインターフェイスの主な違いです。
メソッド
抽象クラスは抽象メソッドと非抽象メソッドを持つことができますが、インターフェイスのメソッドはすべて実装のないメソッドです。
キーワード
抽象クラスが “abstract “キーワードで宣言されるのに対して、インターフェースは “interface “キーワードで宣言されます。
使用方法
PHP における抽象クラスとインターフェイスのもうひとつの違いは、 抽象クラスは抽象化を実現するのに役立ち、インターフェイスは抽象化と多重継承を 実現するのに役立つということです。
結論
PHP 言語はオブジェクト指向プログラミングをサポートしています。
抽象化はオブジェクト指向の柱です。
抽象化を実現する方法として、抽象クラスとインターフェイスがあります。
PHP における抽象クラスとインターフェイスの主な違いは、 抽象クラスは抽象メソッドと非抽象メソッドから構成されるのに対し、 インターフェイスはすべてのメソッドが実装されていないことです。