首页 > 代码库 > 单例模式
单例模式
之前在深入PHP的书中有看过,不过不太理解,打了代码,有种模模糊糊的概念。后来去参加笔试,竟然遇到要写单例模式,后悔TM自己没好好努力学习,结果写不出来,而且也完全不懂单例是啥玩意。
现在重新看了资料,来回顾下吧。
吖的,看了网上一些资料,有些太TM费解了。
特点:
他先将初始化函数变为私有,防止外部new类。然后提供一个公有静态getInstance()方法,返回一个实例引用(也就是这个类只能内部生成对象,注::操作符只能访问静态变量和静态函数)。
还要创建__clone方法防止对象被复制克隆。他只负责一个特定的任务。
应用场景:数据库链接跟全局控制配置信息
配上代码:当然是从网上抄的,只是便于理解。或许在以后自己写项目会用到,到时会有更深的理解 。
class Danli {
//保存类实例的静态成员变量
private static $_instance;
//private标记的构造方法
private function __construct(){
echo ‘This is a Constructed method;‘;
}
//创建__clone方法防止对象被复制克隆
public function __clone(){
trigger_error(‘Clone is not allow!‘,E_USER_ERROR);
}
//单例方法,用于访问实例的公共的静态方法
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}
public function test(){
echo ‘调用方法成功‘;
}
}
//用new实例化private标记构造函数的类会报错
//$danli = new Danli();
//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();
//复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $danli;