オブジェクトインターフェイスにより、あるクラスが実装する必要があるメソッドの 種類を、これらのメソッドの実体を定義することなく、指定するコードを作成できる ようになります。
インターフェイスはキーワードinterfaceにより定義され、通常のクラスと 同様に定義することができますが、メソッドの実装は全く定義されません。
インターフェイス内で宣言される全てのメソッドはpublicである必要があります。 これは、インターフェイスの特性によります。
インターフェイスを実装するには、
implements
演算子を使用し、 このインターフェイスに含まれる全てのメソッドを実装する必要があります。 実装されていない場合、致命的エラーとなります。 各インターフェイスをカンマで区切って指定することで、 クラスは複数のインターフェイスを実装することができます。
注意:
ひとつのクラスの中で、同じ名前の関数を含む 2 つのインターフェイスを 実装することはできません。あいまいさを解決できなくなるためです。
例 19-19. Interface の例
<?php
// インターフェイス 'iTemplate' を宣言する
interface iTemplate
{
public
function
setVariable
(
$name
,
$var
);
public
function
getHtml
(
$template
);
}
// インターフェイスを実装する。
// これは動作します。
class
Template implements iTemplate
{
private $vars
= array();
public
function
setVariable
(
$name
,
$var
)
{
$this
->
vars
[
$name
] =
$var
;
}
public
function
getHtml
(
$template
)
{
foreach(
$this
->
vars
as
$name
=>
$value
) {
$template
=
str_replace
(
'{'
.
$name
.
'}'
,
$value
,
$template
);
}
return
$template
;
}
}
// これは動作しません。
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class
BadTemplate implements iTemplate
{
private $vars
= array();
public
function
setVariable
(
$name
,
$var
)
{
$this
->
vars
[
$name
] =
$var
;
}
}
?>
|
|
instanceof
演算子も参照ください。