设计模式入门系列
单例模式保证了在代码中的任何部分引用的都是同一个对象。这样的特性让人很容易想到它的两个用途:1. 节约内存 2. 用来保存一些在代码执行之后不想被释放的数据(比如说统计代码执行次数或者生成某些不能重复的序列号)。
但是这最直观的两点在PHP中都不是很容易实现。在每次请求结束之后,PHP的所有资源都会回收。即使是使用最频繁的数据,在一次请求中一般也不会用到太多,节约内存并不明显;又因为所有资源都会在请求结束时释放,所以如果想要实现多次请求间数据共享,就只能通过数据库、memcached/redis等缓存或者直接将数据保存在文件中实现。
单例模式另一个经常被提到的使用场景是用它来替代全局变量。在这方面单例类的优势我还想的不是很明白,什么时候想清楚了再补上。
代码:
<?php
class Sington
{
private static $instance;
private $word;
//构造方法设为私有
private function __construct()
{
}
//覆盖__clone方法,防止类被clone
private function __clone()
{
}
//通过该方法获取对象
public static function getInstance()
{
if (empty(self::$instance)) {
self::$instance = new Sington();
}
return self::$instance;
}
public function setWord($word)
{
$this->word = $word;
}
public function getWord()
{
return $this->word;
}
}
$temp = Sington::getInstance();
$temp2 = Sington::getInstance();
$temp->setWord("Hello,world");
var_dump($temp->getWord());//输出“Hello,world”
var_dump($temp2->getWord());//输出“Hello,world”