|
|
前のページ
1
2 |
|
インターフェイス |
インターフェイスは、実装はなく宣言だけが集まったもので、抽象クラス、抽象メソッドと似ています。その振る舞いも似ていますが、(強引に言ってしまうと)多重継承できることがインターフェイスの特徴です。
インターフェイスを拡張したい場合には、「extends」を使います。複数のインターフェイスを継承(多重継承)したい場合には、「extends」の後に継承したいインターフェイス名を「,」で複数つなげて定義します。インターフェイスをクラスに実装するには「implements」を使います(リスト8)。
|
リスト8:interface.php |
<?
interface MainInterface
{
function
getMessage1( );
}
interface SubInterface
{
function
getMessage2( );
}
interface ChildInterface extends MainInterface, SubInterface
{
function
getMessage3( );
function
getMessage4( );
}
interface moreInterface
{
function
getMessage5( );
}
class ImplementsClass implements ChildInterface, moreInterface
{
function
getMessage1( )
{
return
"Define MainInterface!!\n";
}
function
getMessage2( )
{
return
"Define SubInterface!!\n";
}
function
getMessage3( )
{
return
"Define ChildInterface!!\n";
}
function
getMessage4( )
{
return
"Define ChildInterface!!\n";
}
function
getMessage5( )
{
return
"Define moreInterface!!\n";
}
}
$ImplementsClass = new ImplementsClass( );
echo $ImplementsClass->getMessage1( );
echo $ImplementsClass->getMessage2( );
echo $ImplementsClass->getMessage3( );
echo $ImplementsClass->getMessage4( );
echo $ImplementsClass->getMessage5( );
?> |
インターフェイスに定義されているメソッドをすべて実装しないと、「Fatal
error: Class ***** contains 1 abstract methods and must therefore
be declared abstract (*****::****)」のようなエラーが出力されます。
|
|
instanceof演算子、クラスタイプヒント |
instanceof演算子を使うと、オブジェクトが特定のクラスやインターフェイスなどに所属しているかどうかを判別できます。
また、メソッドに渡されるオブジェクトのクラス名を指定するためのクラスタイプヒントが導入されました。クラスタイプヒントは、クラス、オブジェクトに対してのみ効果があり、通常の型に対しては効果がありません(リスト9)。
|
リスト9:class_type.php |
<?
interface MainClassType
{
function
checkType1( MainClassType $MainClassType );
}
interface SubClassType
{
function
checkType2( SubClassType $SubClassType );
}
class ClassType implements MainClassType, SubClassType
{
function
checkType1( MainClassType $MainClassType )
{
}
function
checkType2( SubClassType $SubClassType )
{
}
}
class ngClass
{
}
$ClassType = new ClassType( );
$ngClass = new ngClass( );
if( $ClassType instanceof MainClassType ) { echo "OK!!\n"; }
if( $ClassType instanceof SubClassType ) { echo "OK!!\n"; }
if( !( $ngClass instanceof SubClassType ) ){ echo "NG!!\n";
}
$ClassType->checkType1( $ClassType );
$ClassType->checkType2( $ngClass );
?> |
クラスタイプヒントとして与えられた型以外を渡した場合には、「Fatal error: Argument * must implement interface ****」のようなエラーが出力されます。
|
前のページ
1
2
|
|
|
|
著者プロフィール
桝形 誠二
様々な言語を経験していく中でPHPと出会い、初心者に易しいという魅力に惹かれ続けて早5年。色んな事をPHPで実装しようとしすぎて周囲の反感を買いやすいのが最近の悩み。
|
|
|
|