[PHP-users 14345] Re: データベースのデータを保持するクラスの作成について

Mera php-users@php.gr.jp
2003年 3月 27日 (木) 02:48:51 JST


黒木です。

> データベースのデータを保持するクラスを作成する際に以下の点でいつも悩ん
で
> しまいます。

・・・略・・・

> こうはしてみたものの良いものとはとても思えないのが現状です。
> 
> 皆さんはデータベースのデータを絡めるようなクラスはどのように作られている
> のでしょうか?

私の場合は、PostgreSQL を使ってるのですが、pg_fetch_object
でオブジェクト型でデータを取得した後、セッション情報に保存
しています。

1つのWEBアプリケーションが動いてる間のみですが、数日の間
保持したい場合はシリアライズした情報をそのままデータベース
にまるごと保存したりもします。 他にもまとめて読み込んだ
データがセッション情報に含まれているので読み込み回数が1回
で済みます。

セッション情報に格納する変数はセッション情報格納用の専用
のクラスを作成し、そのクラスの中に登録する情報を格納します。

class Session {
  var $aData ;
  function Session() { $this->aData = array() ; }
  function add( $stKey, $mData ) { $this->aData[$stKey] = $mData }
  function del( $stKey ) { unset( $this->aData[$stKey] ; }
  function get( $stKey ) { return $this->aData[$stKey] ; }
  function exist( $stKey ) { return isset( $this->aData[$stKey] ) ; }
}

セッション機能はあれもこれもと変数をいろいろ登録しておくと
そのうち開発者側が破綻してしまいますので(笑) 登録するのは
この Session クラスだけになります。 ここの中に取得した
情報を登録しておきます。

// セッション開始
session_start() ;

if( !isset( $_SESSION["session"] ) ) {
    // セッション取得
    $oSes = $_SESSION["session"] ;
} else {
    // セッションオブジェクト生成
    $oSes = new Session ;
    $_SESSION["session"] = $oSes ;
}

// データ取得
if( $oSes->exist( "hoe_rec" ) ) {
    // データを取得
    $oHOE = $oSes->get( "hoe_rec" ) ;
} else {
    // データを取得してセッションに登録
    $iCon = pg_connect( hogehoge ) ;
    $iRes = pg_query( $iCon, "select * from hoehoe" ) ;
    $oHOE = pg_fetch_object( $iRes, 0 ) ;
    $oSes->add( "hoe_rec", $oHOE ) ;
}

// セッション情報書き込み
session_write_close() ;


データベースに保存する場合は、$oSes をシリアライズして text型の
カラムに入れてます。

私の場合はこんな感じです。

--
Junichi Kuroki





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