看了網路上幾個用PHP 實現單例模式的作法,我寫了一個比較簡單且通用的方式。
程式碼如下:

class _單例{
    final protected function __construct(&$類別, &$參數){
        $函數 = array($this, '_' . $類別);
        if (is_callable($函數)) {
            call_user_func_array($函數, $參數);
        }
    }

    static function &實例($類別, $參數 = array()){
        static $實例 = array();
        $類別 = (string)$類別;
        $輸出 = &$實例[$類別];
        if(false == isset($輸出) || false == is_object($輸出)){
            $輸出 = new $類別($類別, $參數);
        }
        return $輸出;
    }
}


用法範例:

class 測試 extends _單例 implements __單例{
        protected function _測試($數字, $字串){
            echo (string)$數字, $字串, '<br>';
        }
       
    static function &實例(){
        $參數 = func_get_args();
            return parent::實例(get_class(), $參數);
    }
}

$結果 = 測試::實例(5, 'years');
創作者介紹

失落的技術

HACGIS 發表在 痞客邦 PIXNET 留言(0) 人氣()