もくじ
interface
使いどころ
- 継承先が不特定な場合
特徴
- 多重継承ができる。
- interfaceで用意した関数は実装先で定義しなければならない。
abstractクラス
使いどころ
- 特定の派生先で一部の実装が異なる場合
特徴
- abstractの修飾子をつけたものは、継承先で定義しなくてはいけない。
<?php abstract class Youkai { abstract public function hissatuWaza(); public function useMedal() { echo "妖怪メダルセットオン!"; echo "<hr/>"; } } interface Animal { public function look(); public function eat(); public function naku(); } class Komainu extends Youkai implements Animal { public function hissatuWaza() { echo "ひとだま乱舞"; echo "<hr/>"; } public function look() { echo "よく見るズラ"; echo "<hr/>"; } public function eat() { echo "白くて甘くて美味しいズラ!"; echo "<hr/>"; } public function naku() { echo "もんげぇ"; echo "<hr/>"; } } $youkaiObj = new Komainu(); $youkaiObj->hissatuWaza(); $youkaiObj->useMedal(); echo "<hr/>"; $youkaiObj->look(); $youkaiObj->eat(); $youkaiObj->naku();
表示結果
ひとだま乱舞
妖怪メダルセットオン!
よく見るズラ
白くて甘くて美味しいズラ!
もんげぇ
Trait
特徴
- クラスの階層を超えて、多重継承させることができる。
<?php trait Youkai { public function watch_chi() { echo "妖怪発見!"; echo "<hr/>"; } } trait HumanAct { public function eatIce() { echo "白くて甘くて美味しいずら"; echo "<hr/>"; } } class Komainu { use Youkai, HumanAct; } $youkaiObj = new Komainu(); $youkaiObj->watch_chi(); $youkaiObj->eatIce();
表示結果
妖怪発見!
白くて甘くて美味しいずら