单例模式(Singleton)
2018-08-19 本文已影响0人
萧格
什么是单例模式?
根据这个名称,我们很容易了解到,单例模式指的是在整个应用中只有一个对象实例的设计模式。
为什么要用单例模式?
php常常和数据库打交道,如果在应用中如果频繁建立连接对象,进行new操作的话,会消耗大料的系统内存资源,这并不是我们希望看到的。再则,在团队合作项目中,单例模式可以有效避免不同程序员new自己的对象,造成人为的系统消耗。
实例
<?php
class Singleton {
//随机数
public $randNo;
//用于保存实例
private static $_instance;
//构造函数为私有,防止创建对象
private function __construct()
{
$this->randNo = rand(1,9999);
}
//创建一个用于时利和对象的方法,如果不存在一个类的实例属性,就创建一个,否则就取这个实例属性。
public static function getInstance()
{
if(!(self::$_instance instanceof self)) {
self::$_instance = new self;
}
return self::$_instance;
}
//防止对象被复制
public function __clone()
{
trigger_error('Clone is not allowed!');
}
//防止反序列化后创建对象
public function __wakeup()
{
trigger_error('Unserialize is not allowed!');
}
}
//类内部实例化,外部无需实例化自接取实例
$s1 = Singleton::getInstance();
$s2 = Singleton::getInstance();
var_dump($s1,$s2);
//输出结果:两个对象是一样的,说明只实例化一次
//object(Singleton)#1 (1) { ["randNo"]=> int(7526) }
//object(Singleton)#1 (1) { ["randNo"]=> int(7526) }
?>