概述:php
做为对象的建立模式,单例确保某一个内在系统中只存在一个实例,它不能够建立副本。
克隆函数(__clone )以及构造函数(__construct )必须声明为私用, 防止外部程序 建立一个新类 ,而失去单例模式的意义。
PHP 语言是一种解释型的语言,在页面执行完成后,全部的相关资源都会被回收。PHP在语言级别上,不能像C#,JAVA编译型语言同样,没办法让某个对象长距内存。
然而在单一请求场景时,仍是能够经过单例模式来共享对象,好比数据库链接对象。
class DbConnection { private static $_instance; private static $token = 0; public static function getInstance() { if (static::$_instance instanceof DbConnection) { return static::$_instance; } // 随机生产一个 token 标示当前内 static::$token = rand(100, 1000); static::$_instance = new DbConnection(); return static::$_instance; } // 克隆函数以及构造函数必须声明为私用, // 防止外部程序 建立一个新类 ,而失去单例模式的意义。 private function __clone() { } private function __construct() { } public function open() { echo "init times:" . static::$token . '<br/>'; } }
单例与static 类的 比较:数据库
一、singleton 可以很好的保持对象的面相对象,好比静态工具类则能够使用 static。 二、单例能够实现自某接口,能够继承自某类。静态类也能够继承自某类,可是就无法使用父类里面的protect成员了。