Changeset 21903


Ignore:
Timestamp:
2012/06/09 20:48:43 (12 years ago)
Author:
Seasoft
Message:

#1467 (SC_Query#getSingletonInstance DB問い合わせ用パラメータの保持・初期化が不適当)
#1858 (SC_Query#getSingletonInstance グローバル変数の使用を避ける)
#1859 (無駄な処理を改善する)

  • SC_Query#getSingletonInstance isset() と is_null() の AND 実行は無意味

#1860 (SC_Query#getSingletonInstance 第1引数($dsn)の差を適切に処理できない)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/class/SC_Query.php

    r21867 r21903  
    3939    var $order = ''; 
    4040    var $force_run = false; 
     41    static $arrInstance = array(); 
    4142 
    4243    /** 
     
    9899     */ 
    99100    function getSingletonInstance($dsn = '', $force_run = false, $new = false) { 
    100         if (!isset($GLOBALS['_SC_Query_instance']) 
    101             || is_null($GLOBALS['_SC_Query_instance'])) { 
    102             $GLOBALS['_SC_Query_instance'] =& new SC_Query_Ex($dsn, $force_run, $new); 
    103         } 
    104         $GLOBALS['_SC_Query_instance']->where = ''; 
    105         $GLOBALS['_SC_Query_instance']->arrWhereVal = array(); 
    106         $GLOBALS['_SC_Query_instance']->order = ''; 
    107         $GLOBALS['_SC_Query_instance']->groupby = ''; 
    108         $GLOBALS['_SC_Query_instance']->option = ''; 
    109         return $GLOBALS['_SC_Query_instance']; 
     101        if (!isset(SC_Query_Ex::$arrInstance[$dsn])) { 
     102            SC_Query_Ex::$arrInstance[$dsn] =& new SC_Query_Ex($dsn, $force_run, $new); 
     103        } 
     104        /* 
     105         * 歴史的な事情で、このメソッドの呼び出し元は参照で受け取る確率がある。 
     106         * 退避しているインスタンスをそのまま返すと、退避している SC_Query の 
     107         * プロパティを直接書き換えることになる。これを回避するため、クローンを返す。 
     108         * 厳密な意味でのシングルトンではないが、パフォーマンス的に大差は無い。 
     109         */ 
     110        return clone SC_Query_Ex::$arrInstance[$dsn]; 
    110111    } 
    111112 
Note: See TracChangeset for help on using the changeset viewer.