首页 > 技术文章 > 单例模式

mykcc 2014-05-29 02:00 原文

之前在深入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; 

推荐阅读