もくじ
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();
表示結果
妖怪発見!
白くて甘くて美味しいずら

