PHP 5 では、抽象クラスとメソッドが導入されました。 abstractとして宣言されたクラスのインスタンスを生成することはできません。 1つ以上の抽象メソッドを含む全てのクラスもまた抽象クラスとなります。 abstractとして定義されたメソッドは、そのメソッドの外観を宣言するのみで、 実装を定義することはできません。
抽象クラスから継承する際、親クラスの宣言で abstract としてマークされた 全てのメソッドは、子クラスで定義されなければなりません。加えて、 これらのメソッドは同等以下の
可視性
で 定義される必要があります。例えば、抽象メソッドが protected として定義された場合、その関数の実装は protected または public のどちらかとして定義する必要があります。
例 19-18. 抽象クラスの例
<?php
abstract
class
AbstractClass
{
// 拡張クラスにこのメソッドの定義を強制する
abstract protected
function
getValue
();
abstract protected
function
prefixValue
(
$prefix
);
// Common method
public
function
printOut
() {
print
$this
->
getValue
() .
"\n"
;
}
}
class
ConcreteClass1
extends
AbstractClass
{
protected
function
getValue
() {
return
"ConcreteClass1"
;
}
public
function
prefixValue
(
$prefix
) {
return
"
{
$prefix
}
ConcreteClass1"
;
}
}
class
ConcreteClass2
extends
AbstractClass
{
public
function
getValue
() {
return
"ConcreteClass2"
;
}
public
function
prefixValue
(
$prefix
) {
return
"
{
$prefix
}
ConcreteClass2"
;
}
}
$class1
= new
ConcreteClass1
;
$class1
->
printOut
();
echo
$class1
->
prefixValue
(
'FOO_'
) .
"\n"
;
$class2
= new
ConcreteClass2
;
$class2
->
printOut
();
echo
$class2
->
prefixValue
(
'FOO_'
) .
"\n"
;
?>
|
上の例の出力は以下となります。
ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2
|
|
'abstract'という名前のユーザー定義関数または関数を有さない コードは修正なしに動作します。