• 设计模式-单例模式


    <?php
    
    /**
     * 单例模式
     * 
     * 以前写单例构造器的时候总是为如何把需要的参数传给类而烦恼
     * 
     *  如果项目中的类文件都采用这种设计的话就ok了
     * 
     *  每次获取实例的时候都可以更新资源变量
     */
    class Utils_Common {
    
        private static $_instances = array();
    
        /**
         * 单例包装
         * @param 类名 $klass
         * @param 资源变量 $resource
         * @return null object
         */
        public static function getInstance($klass, $resource = null) {
            if (isset(self::$_instances[$klass])) {
                if (null !== $resource) {
                    self::$_instances[$klass]->setResource($resource);
                }
                return self::$_instances[$klass];
            } else {
                if (class_exists($klass)) {
                    self::$_instances[$klass] = new $klass($resource);
                    return self::$_instances[$klass];
                } else {
                    return null;
                }
            }
        }
    
    }
    
    class Db {
    
        //参数等资源
        private $resource;
    
        public function __construct($resource) {
            $this->resource = $resource;
        }
    
        public function setResource($resource) {
            $this->resource = $resource;
        }
    
        public function getResource() {
            return $this->resource;
        }
    
        protected function getRsrcParams($key) {
            return isset($this->resource[$key]) ? $this->resource[$key] : array();
        }
    
        protected function setRsrcParams($key, $value) {
            $this->resource[$key] = $value;
        }
    
        public function go() {
            echo 'success:' . $this->getRsrcParams('host');
        }
    
    }
    
    header('Content-Type:text/plain;charset=utf-8');
    Utils_Common::getInstance('Db', array('host' => 'localhost'))->go();
  • 相关阅读:
    python的不可变对象与可变对象及其妙用与坑
    WAAPI+Python使用中的相关问题和学习记录
    开发工具使用
    面试要点5
    面试要点4
    HTTP状态码——详解
    ElasticSearch使用curl导数据报400可能原因
    elasticsearch的安装、部署
    js二级联动
    aspose.words for java操作文档doc,设置一级二级三级标题以及段落表格等详情
  • 原文地址:https://www.cnblogs.com/bai-jimmy/p/4307666.html
Copyright © 2020-2023  润新知