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