其实单例模式,说白了就是说一个类只能实例化一次。但是我们如何在这个实例化一次上面做文章呢。其实有个突破口就是__construct()这个魔术方法。这个方法就代表着如果类实例化的时候,就会自动执行这个方法。
单例类至少拥有以下三种公共元素:
必须拥有一个构造函数,并且必须被标记为private。
拥有一个保存类的实例的静态成员变量。
拥有一个访问这个实例的公共的静态方法
<?php
/**
* 单例模式
*
* 保证一个类仅有一个实例,并提供一个访问它的全局访问点*
*/
class Singleton {
static private $_instance = null;
private function __construct() {
}
static public function getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}
private function __clone(){
}
public function display() {
echo "it is a singlton class function";
}
}
// $obj = new Singleton(); // 声明不能成功
$obj = Singleton::getInstance();
var_dump($obj);
$obj->display();
$obj1 = Singleton::getInstance();
var_dump(($obj === $obj1));
?>