|
|
1 2 次のページ
|
|
final修飾子 |
前回に引き続き、PHP5のオブジェクト指向の機能について解説します。まず、Privateなどと同じく新しく追加されたfinal修飾子を紹介します。
final修飾子を付けてクラスやメソッドを宣言すると、クラスの継承やメソッドのオーバーライドを許可しないように制御できます(リスト6)。これにより、意図しない継承が行われて、不正な動作を引き起こすのを防ぐことができます。
|
リスト6:final.php |
<?
final class FinalClass
{
function
getPrint( )
{
echo
$this->Foo;
echo
$this->Bar;
}
}
/********************************************
class MyFinalClass extends FinalClass
{
}
********************************************/
class FinalMethod
{
function
getPrint( )
{
echo
$this->Foo;
echo
$this->Bar;
}
final
function setPrint( $Value1, $Value2 )
{
$this->Foo
= $Value1;
$this->Bar
= $Value2;
}
}
class MyFinalMethod extends FinalMethod
{
/********************************************
function
setPrint( $Value1, $Value2 )
{
$this->Foo
= $Value2;
$this->Bar
= $Value1;
}
********************************************/
}
//$MyFinalClass = new MyFinalClass( );
$MyFinalMethod = new MyFinalMethod( );
?>
|
クラスに対して「final」を定義すると、クラス全体を継承することが禁止されます。メソッドに対して「final」定義をすると、クラスの継承は許可しますが、「final」定義のあるメソッドのオーバーライドは禁止されます。禁止された継承、オーバーライドを行うと、次のようなエラーが出力されます。
|
- Fatal error: Class ***** may not
inherit from final class (FinalClass)
- Fatal error: Cannot override final
method *****::*****()
|
メンバー変数には「final」の定義はできないので、Private/Protectedメンバー変数、メソッドと混同しないよう注意してください。
|
|
抽象クラス、メソッド |
PHP5では、抽象クラスと抽象メソッドを使って、メソッドの実装を強制することができます。
抽象メソッドは、定義だけで実装が提供されないメソッドです。抽象メソッドを含むクラスは、抽象クラスとして宣言する必要があります。どちらも「abstract」を使って宣言します。抽象クラスを拡張したい場合には「extends」を使います(リスト7)。
|
リスト7:abstract.php |
<?
abstract class AbstractClass
{
abstract
function getMessage1( );
}
abstract class SubAbstractClass extends AbstractClass
{
abstract
function getMessage2( );
abstract
function getMessage3( );
}
class ImplementedClass extends SubAbstractClass
{
function
getMessage1( )
{
return
"Abstract Method!!\n";
}
function
getMessage2( )
{
return
"SubAbstract Method!!\n";
}
function
getMessage3( )
{
return
"SubAbstract Method!!\n";
}
}
$ImplementedClass = new ImplementedClass( );
echo $ImplementedClass->getMessage1( );
echo $ImplementedClass->getMessage2( );
echo $ImplementedClass->getMessage3( );
$AbstractClass = new AbstractClass( );
?> |
抽象クラスに定義されている抽象メソッドを実装しないと、「Fatal
error: Cannot instantiate abstract class ****」のようなエラーが出力されます。また、抽象クラスのインスタンス生成はできません。
|
1 2 次のページ
|
|
|
|
著者プロフィール
桝形 誠二
様々な言語を経験していく中でPHPと出会い、初心者に易しいという魅力に惹かれ続けて早5年。色んな事をPHPで実装しようとしすぎて周囲の反感を買いやすいのが最近の悩み。
|
|
|
|