[PHP-users 22720]Re: PerlのDESTORYメソッドに匹敵するもの

KOYAMA Tetsuji koyama @ hoge.org
2004年 7月 22日 (木) 22:22:55 JST


  小山です。

At Thu, 22 Jul 2004 22:00:42 +0900,
大島由喜枝 wrote:
> さっそく register_shutdown_function() で インスタンスデストラクタ
> 的な使い方ができるかどうかやってみました。
> 
> 今回私がやりたかったデータベース接続の切断はできませんでした。
> というのも、register_shutdown_function() ではメソッドは指定できないので
> インスタンス変数にアクセスすることができないからです。
> register_shutdown_function() にメソッドが指定できないので以下のように
> クラスの外に destory() をつくったところでインスタンス変数 $db にアクセス
> できないので、意味ないでした。。。。。
> 
> class Data {
>     var $db;
>     function Data() {
>         ...
>         register_shutdown_function('destory');
>     }
>     ...
> }
> function destory() {
>     ...
> }

  register_shutdown_function を利用したなんちゃってデストラクタを使い
たいのであれば、PEAR のサブクラスにするのが楽ちんです。

  こんな感じに _クラス名 というメソッドがあれば、それをプログラム終了
時に呼び出してくれます。

require_once 'PEAR.php';

class Data extends PEAR {
    var $db;
    function Data() {
        parent::PEAR(); // 親コンストラクタの呼び出し
        ...
    }

    function _Data() {  // なんちゃってデストラクタ
        $this->destroy();
    }

    function destroy() {
       ....
    }
}

-- 
	小山 哲志@ビート・クラフト
	koyama @ beatcraft.com
	koyama @ hoge.org


PHP-users メーリングリストの案内