投稿

ラベル(インターフェース)が付いた投稿を表示しています

[PHP] 抽象クラスとインターフェース

PHPの抽象クラスとインターフェースについてです。 抽象クラス 抽象クラスは継承される前提のクラスで、それ自体ではインスタンスを生成することが出来ないクラスです。 インスタンスは生成できませんが、メソッドやプロパティは持つことが可能で、これらは基本的に継承されたサブクラスから呼ばれて扱われます。 抽象クラスの最大の特徴は、抽象メソッドを持つことが可能です。抽象メソッドとは、処理を記載しないメソッドで、サブクラスでオーバーライドされて処理が実装されます。 抽象クラスを継承したサブクラスでは、抽象メソッドを必ずオーバーライドしなくてはなりません。 抽象クラスと抽象メソッドの定義構文 abstract class 抽象クラス名 { abstract function 抽象メソッド名(シグネチャ) : 戻り値(任意); } [実装例]抽象メソッドをオーバーライドする コード abstract class TestAbstract { abstract function printName(string $name) : void; } class Test extends TestAbstract { function printName(string $name) : void { print "Hello {$name}.\n"; } } $test = new Test(); $test->printName("abstract"); 実行結果 $ php test_abstract.php Hello abstract. [実装例]抽象クラスからサブクラスに継承されたメソッドを実行する 抽象クラスに定義されたメソッドから、サブクラスに継承されたメソッドを実行することが出来ます。 コード 以下の例ではTestクラスでオーバーライドされたprintNameメソッドを、親クラスであるTestAbstractクラスのtestメソッドから呼び出しています。 抽象クラス事態はインスタンスを持つことはできませんが、サブクラスであるTestクラスのインスタンスがあるため、testメソッド内で$thisキーワードが使用できます。 abst