|
|
前のページ
1
2
|
|
コンストラクタとデストラクタ
|
コンストラクタは以前から存在していました。コンストラクタはオブジェクトが生成されるたびに呼び出されるので、初期化処理などを行うのに有効です。
PHP5では、コンストラクタが一新されました。互換性のため、古い形式(クラス名と同名のメソッド)でも使うことができますが、今後は以降で紹介する新しい形式に統一したほうがよいでしょう。
デストラクタは、オブジェクトが破棄された場合に呼び出されます。たとえば、ログ出力、メール送信、データベース接続終了、その他目的に応じた処理を行いたい場合に有効です。
PHP5でコンストラクタを定義するには、「__construct」を使います。デストラクタを定義するには、「__destruct」を使います。
継承を行っている場合でも、親クラスのコンストラクタやデストラクタは自動的には呼ばれません。親クラスのコンストラクタやデストラクタを実行したい場合には、コンストラクタメソッドやデストラクタメソッドの中で明示的に「parent::__construct(
)」や「parent::__destruct( )」を実行する必要があります(リスト3)。
|
リスト3:const_dest.php |
<?
class MainConstDestruct
{
function
__construct( )
{
echo
"Main Start!!\n";
}
function
__destruct( )
{
echo
"Main End!!\n";
}
}
class SubConstDestruct extends MainConstDestruct
{
function
__construct( )
{
parent::__construct(
);
echo
"Sub Start!!\n";
}
function
__destruct( )
{
echo
"Sub End!!\n";
parent::__destruct(
);
}
}
$SubConstDestruct = new SubConstDestruct( );
$ConstDestruct = null;
?> |
|
Private/Protectedのメンバー変数とメソッド |
今までのメンバー変数はすべてpublic扱いで、外部から呼出しや参照ができてしまいましたが、PHP5ではこれらを制御できるようになりました。
メンバー変数、メソッドに対して「protected」や「private」の定義を行うことで、アクセスを制御できます(リスト4、リスト5)。
|
リスト4:pri_pro_h.php |
<?
class PrivateProtected
{
private
$Foo = "Private String!!\n";
protected
$Bar = "Protected String!!\n";
function
getPrint( )
{
echo
$this->Foo;
echo
$this->Bar;
}
}
class MyPrivateProtected extends PrivateProtected
{
function
getPrint( )
{
echo
"------------------\n";
PrivateProtected::getPrint(
);
echo
"------------------\n";
echo
$this->Foo;
echo
$this->Bar;
}
}
class MyMyPrivateProtected
{
function
getPrint( )
{
echo
"------------------\n";
PrivateProtected::getPrint(
);
echo
"------------------\n";
}
}
$PrivateProtected = new PrivateProtected( );
//echo $PrivateProtected->Foo;
//echo $PrivateProtected->Bar;
echo $PrivateProtected->getPrint( );
$MyPrivateProtected = new MyPrivateProtected( );
echo $MyPrivateProtected->Foo;
//echo $MyPrivateProtected->Bar;
echo $MyPrivateProtected->getPrint( );
$MyMyPrivateProtected = new MyMyPrivateProtected( ); $MyMyPrivateProtected->getPrint(
);
?> |
リスト5:pri_pro_m.php |
<?
class PrivateProtected
{
private
function PrivatePrint( )
{
echo
"PrivateMethod!!\n";
}
protected
function ProtectedMethod( )
{
echo
"ProtectedMethod!!\n";
}
function getPrint( )
{
$this->PrivatePrint(
);
$this->ProtectedMethod(
);
}
}
class MyPrivateProtected extends PrivateProtected
{
function
getPrint( )
{
//
$this->PrivatePrint( );
$this->ProtectedMethod(
);
}
}
$PrivateProtected = new PrivateProtected( );
//echo $PrivateProtected->PrivatePrint( );
//echo $PrivateProtected->ProtectedMethod( );
echo $PrivateProtected->getPrint( );
$MyPrivateProtected = new MyPrivateProtected( );
echo $MyPrivateProtected->getPrint( );
?> |
許可していない位置からPrivateなどのメンバー変数・メソッドにアクセスを行うと、次のようなエラーが出力されます。
|
- Fatal error: Cannot access private
property
- Fatal error: Cannot access protected
property
- Fatal error: Call to private method
- Fatal error: Call to protected method
|
「protected」と「private」の違いは、「protected」は宣言されたクラスとそこから継承されたクラスからアクセスすることができるのに対し、「private」は宣言されたクラスからのみアクセスできるというものです。
|
前のページ
1
2
|
|
|
|
著者プロフィール
桝形 誠二
様々な言語を経験していく中でPHPと出会い、初心者に易しいという魅力に惹かれ続けて早5年。色んな事をPHPで実装しようとしすぎて周囲の反感を買いやすいのが最近の悩み。
|
|
|
|