[PHP-users 21961]Re: オブジェクトに、自分自身を削除するメソッドを実装する方法について
yuji koga
koga-y @ mcp-net.com
2004年 6月 3日 (木) 13:25:24 JST
お世話になります。古賀です。
細井様、岡部様、レス有り難う御座います。
> class A {
> function destroy(){
> $this = null;
> }
> }
> とやってみたら、isset($A)はなくりますね。
関数ばかり探していたのが失敗の元でした。目からウロコの解決策だと思います。
これなら、インスタンスの全ての参照も同時にNULLになり、
削除されたのとほぼ同等の扱いになりますね。
自分の場合、Object Poolの中身もNULLになりますので、これは便利です。
> 但し、$GLOBALS['A']はnullという値が残るという、奇妙な状態になります。
ここから先は、
$A = NULL;
と
nuset($A);
の結果が完全に同一ではないPHP仕様に依存しますから、
問題が生じないように気を付けて実装することに致します。
話は変わりますが、これでPearのデストラクタを用いなくても、デストラクタの
ような機構(ガベージコレクタではなく、後処理やDB処理など)を
簡単に組み込む事が出来ますね。
class A {
function destructor(){
/* 何か定義しておく(下位クラスで別々の定義をオーバーライドしても可) */
}
function destroy(){
$this->destructor();
$this = NULL;
}
}
で class A (若しくはそれを継承したクラス)のインスタンス消去時に
destroy()メソッドを実行すれば、先だってdestructor()メソッドも実行され、
何かと便利そうです。
以上、非常に参考になりました。有り難う御座いました。
<? /*********************************
株式会社メディアプレス 制作課 古賀裕二
会社:koga-y @ mcp-net.com
自宅:yuuukunn @ h7.dion.ne.jp
*********************************/ ?>
PHP-users メーリングリストの案内