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

大島由喜枝 sanoyuki @ ninus.ocn.ne.jp
2004年 7月 23日 (金) 14:35:56 JST


大島です。

>
>   PEAR を利用した「なんちゃってデストラクタ」は、スコープから抜けたか
> らといって即座に呼び出されるわけではありません。
> register_shutdown_function を使っているので、呼び出されるのは常にプロ
> グラムの終了時です。それが「なんちゃって」の所以です。:-)

なるほど。なるほど。それで「なんちゃって」なのですね。笑。

>
>   sumiya さんがお書きになっているように、DB の接続ハンドルや、ファイル
> ハンドルなど、PHP がリソースとして認識しているものはプログラム終了時に
> 自動的に開放されるので、ユーザがあえて何か処理をする必要はありません。

Perl でもスクリプト終了時にファイルハンドルは
閉じられます(おそらくDBハンドルも。)ただ、いらなくなったものはできるだけ
早く開放したほうが資源の無駄遣いが少ないからよいのだ思ったのですが。
そう思った理由として、Perl のラクダ本(すみません、Perl ネタばかりで。
このラクダ本は、Perl 開発者が書いている Perl の基本書中の基本書です)
の「12.6 インスタンスデストラクタ」の部分で以下のような記述があります。

「Perl では、特に何もしないで、自動的にメモリ管理が行われるので
デストラクタが必要になることはまれである。しかしオブジェクトによっては
メモリシステムの外部に状態をもっているため(たとえば、ファイルハンドルや
データベースコネクション)後処理が必要となることがある。」

と、デストラクタの使用例としてデータベースコネクションの切断をあげています。
これを読んだとき、「どうせ、スクリプト終了時に切断されるんだから
ほっといてもいいじゃないの。でも、こうやって書いてあるんだから、デストラクタ
でできるだけ早く切断したほうが、資源の無駄遣いにならないんだろうな。」と思っ
たんです。

でも、実際にシステムを構築する際には、これぐらいのことは気にしなくて
もよいということなのですね。

今回は、勉強がてらに作っているシステムなので、disconnect の記述は
しないほうが楽なのでそのようにしてしまおうと思います。



>
>   終了時に何か特別な処理をしなければならない場合など、限定的な用途のみ
> に効果を発揮するものだと、私は考えています。
>
> -- 
> 小山 哲志@ビート・クラフト
> koyama @ beatcraft.com
> koyama @ hoge.org
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3



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