特点

程序在运行的过程中有且只有一个实例。

用途

数据库连接等,可以提高程序性能

实现思路

用一个静态变量保存当前类的实例。禁用类的继承和克隆,提供一个静态方法获得类的实例。获得实例之前先判断当前实例是否存在,存在则直接返回,不存在则创建一个新的实例。

示例代码

<?php
namespace demo;

class Single
{
    private static $instance;
    //禁止直接创建实例
    private function __construct()
    {
    }
    //禁止克隆
    private function __clone()
    {
    }
    //禁止反序列化
    private function __wakeup()
    {
    }
    //对外接口,获得实例
    public static function getInstance()
    {
        if(self::$instance == null) {
            self::$instance=new self();
        }

        return self::$instance;
    }
}

$a=Single::getInstance();
$b=Single::getInstance();

var_dump($a);
var_dump($b);

返回结果:

class demo\Single#1 (0) {
}
class demo\Single#1 (0) {
}

编号相同,说明返回的是同一个实例。


本文由 yang 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论