真正优秀的程序员是那些专注于认识、理解、沟通和解决问题的人,你得明白,软件只是用来增加效率的工具而已

单例模式和php中的应用

1.单例模式概念

单例模式又叫职责模式,它要求一个类有且只有一个实例,并且提供一个全局的访问点。
– 它们必须拥有一个构造函数,并且必须被标记为private
– 它们拥有一个保存类的实例的静态成员变量
– 它们拥有一个访问这个实例的公共的静态方法
– 禁止clone实例

2.单例模式的应用场景

  • 控制资源的情况下,方便资源之间的互相通信。如线程池等。
  • 资源共享时,避免由于资源操作时导致的性能问题或损耗。如日志文件、应用配置。(所以用单例模式解决)
    >借鉴 https://blog.csdn.net/starrykey/article/details/52049639

3.PHP单例模式应用场景

3.2 php特点

  • 由于php是解释型语言,使得每个PHP页面被解释执行后,相关资源(全局变量、类的静态成员等)都会进行回收,所有不能做到让某个对象常驻内存。
  • 所以php单例模式一般用于单个页面内请求时, 多个操作需要共享同一对象资源的情况下使用。

3.2 具体应用

  • 应用程序与数据库交互
    使用单例模式可以必选大量的new操作。
  • 控制配置信息
    全局控制配置信息

4.例子

class Single {

    private $name; //声明一个私有的实例变量
    private function __construct(){ //声明私有构造方法为了防止外部代码使用new来创建对象。

    }

    static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
    static public function getinstance(){ //声明一个getinstance()静态方法,用于检测是否有实例对象
        if(!self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    //禁止克隆
    private function __clone(){

    }

    public function setname($n){ $this->name = $n; }
    public function getname(){ return $this->name; }
}


$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning
微风小站 » 单例模式和php中的应用
分享到: 更多 (0)