单例模式可以确认该对象只有一个实例存在,对于某些创建比较复杂或者是系统核心的类,不易或不能多次使用new创建,应设置为单例类。
简单的单例例子
我们可以通过在类中定义一个$instance并在初始化时实例化一个对象。
<?php
//单例类
class Singleton{
private static $instance = new Singleton();
private function Singleton(){}
public static function getInstance(){
return Singleton::$instance;
}
public function eat(){
echo 'animal eat ... ';
}
}
//结果:animal eat ...
但是这种方式在类加载的时候,直接实例化一个对象,这样的单例类如果过多,会影响系统的启动速度。因此可以采用’延迟加载’的方式,将类的实例化推迟到第一次使用单例类对象。
采用延迟加载的单例类
//单例类
class Singleton{
//延迟加载
private static $instance = null;
//将构造类设置为私有,防止多次创建
private function Singleton(){}
public static function getInstance(){
if (Singleton::$instance === null){
Singleton::$instance = new Singleton();
}
return Singleton::$instance;
}
public function eat(){
echo 'animal eat ... ';
}
}
//测试
Singleton::getInstance()->eat();
//结果:animal eat ...