[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 メーリングリストの案内