使用场景:
- 1、要求生产唯一序列号。
- 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
- 3、I/O 与数据库的连接,频繁地创建与销毁。
实现:
Singleton.php
<?php class Singleton { private static $obj; private $str = '默认数据'; private function __construct() { // 构造方法私有化,外部不能直接实例化这个类 } /** * 判断对象,使对象全局唯一 * @return Singleton */ public static function call() { if (self::$obj == null) { self::$obj = new Singleton(); } return self::$obj; } /** * 修改数据 */ public function setStr(){ $this->str = '修改数据'; } /** * 获取数据 * @return string */ public function getStr() { return $this->str; } }
最主要的就是call方法,判断使对象唯一并实例化用静态变量保存。
调用:
$demo1 = Singleton::call(); echo $demo1->getStr(); echo "\n"; $demo2 = Singleton::call(); echo $demo2->getStr(); echo "\n"; $demo1->setStr(); echo $demo1->getStr(); echo "\n"; echo $demo2->getStr();
可以看出,demo1和demo2的值是一样的,做到了全局唯一。