<?php
final class Singleton
{
/**
* @var 这个类的 *单例*
*/
private static $instance;
/**
* 返回这个类的 *单例*
*
* @return Singleton The *Singleton* instance.
*/
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static();
return static::$instance;
}
/**
* 把构造函数声明为 protected,防止用 `new` 操作符在这个类之外创建新的实例
*/
private function __construct()
{
}
/**
* 把 clone 方法声明为 private,防止克隆单例
*
* @return void
*/
private function __clone()
{
}
/**
* 把反序列化方法声明为 private,防止反序列化单例
*
* @return void
*/
private function __wakeup()
{
}
}
$obj = Singleton::getInstance();
var_dump($obj === Singleton::getInstance()); // bool(true)
转自:http://laravel-china.github.io/php-the-right-way/pages/Design-Patterns.html