PHPの抽象クラスとインターフェイスのメモ
抽象クラスとインターフェイスのメモです。
抽象クラス
抽象クラスを継承した、サブクラスは継承クラスのabstractキーワードをつけたメソッドを必ず実装(オーバーライド)しなければならない。 通常のクラスと同様に、abstractをつけずに普通のメソッドやプロパティも定義することができます。
抽象クラスは直接インスタンスを作ることはできません。 アクセス修飾子はpublic
とprotected
を利用することができます。
抽象クラス
<?php abstract class AbstractClass { abstract public function hoge(); }
サブクラス
<?php require_once 'AbstractClass.php'; class MyClass extends AbstractClass { public function hoge() { echo 'hoge'; } }
実行する
<?php require_once 'MyClass.php'; $my_class = new MyClass(); $my_class->hoge(); //hoge
インターフェイス
インターフェイスを定義するにはinterfaceキーワードを利用します。
使う側は、implementsキーワードを利用します。 インターフェイスに宣言したメソッドは必ず実装しなければいけません。
インターフェイスのメソッドはpubulicでなければいけません。 定数を定義できるが、実装側でオーバーライドすることはできません。
インターフェイス
<?php interface InterfaceIfc { public function hoge(); }
インターフェイスを実装したクラス
<?php require_once 'InterfaceIfc.php'; class MyClass implements InterfaceIfc { public function hoge() { echo 'hoge'; } }
実行する。
<?php require_once 'MyClass.php'; $my_class = new MyClass(); $my_class->hoge(); //hoge
抽象クラスとインターフェイスの違い
◎インターフェイスは、クラスに対して複数定義することができる
<?php interface HogeIfc { public function hoge (); } interface FugaIfc { public function fuga (); } class ClassA implements HogeIfc, FugaIfc { public function hoge(){ echo 'hoge'; } public function fuga(){ echo 'fuga'; } }
◎抽象クラスは実装のあるメソッドを持つことができる
<?php abstract class AbstractClass { abstract public function hoge(); public function fuga(){ echo 'fuga'; } }
抽象クラスとインターフェイス使い分け
抽象クラスは
複数の派生クラスで一部実装が異なる場合に利用する。 「走る、歩く」という機能は同じだが、「踊る」というきのはそれぞれのクラスでことなる場合などに利用する。
インターフェイス
不特定のクラスで、共通のメソッドを定義したい場合に利用する。