单例模式(Singleton Pattern)
单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要也有可能一个线程中属于单例)
PHP实现单例模式
<?php
class Singleton
{
//创建一个静态变量保存对象
static private $instance;
//防止通过new直接创建对象
private function __construct()
{
}
//防止通过clone直接创建对象
private function __clone()
{
}
//判断$instance是不是Singleton的对象,不是则创建
static public function getInstance(){
if(!self::$instance instanceof self){
self::$instance = new self();
}
return self::$instance;
}
public function say(){
echo '我是一个单例';
}
}
$instance = Singleton::getInstance();
$instance->say();
?>
单例模式在PHP中的应用场景
(1)应用程序与数据库交互
一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
(2)控制配置信息
如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现,如日志文件、应用配置
<?php
class DB
{
//定义一个db变量保存数据库句柄对象
private $db;
//创建一个静态变量保存对象
private static $instance;
//在构造方法中实例化$db
private function __construct()
{
$this->db = mysqli_connect();
}
private function __clone()
{
}
public static function getInstance(){
if(!self::$instance instanceof self){
self::$instance = new self();
}
return self::$instance;
}
public function getUserInfo()
{
}
}
$_db = Db::getInstance();
$_db->getUserInfo();
?>