码迷,mamicode.com
首页 > Web开发 > 详细

辛星和您一起解析PHP中的单例模式

时间:2014-07-26 01:57:16      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:辛星   单例   设计模式   php   模式   

     其实单例模式还是用的挺多的,要说到最经典的例子,可能就是操纵数据库的类了,它如果是单例的话,可以避免大量的new操作消耗资源,而如果系统中需要一个类来管理全局的信息,则把它用成单例也是很不错的,因为它是全局有效的,我们无需多次实例化。

    下面是正确的调用方式示例:

<?php
class Xin{
	//保存该类的实例
	private static $_instance;

	//不让外部调用该构造函数
	private function __construct(){
		echo "辛星加油";
	}

    //用于获取实例,必须是静态的,否则外部无法调用
	public static function get_instance(){
		//如果该单例不存在,则创建它
		if(!(self::$_instance instanceof self)){
			self::$_instance = new self;
		}
		//返回它既可
		return self::$_instance;
	}
	//不允许对象被克隆
	public function __clone(){
		trigger_error('Clone Denyed!',E_USER_ERROR);
	}
	//功能函数
	public  function xin(){
		echo "调用Xin类的xin函数,辛星你好";
	}
}


//正确的调用方式
$xin = Xin::get_instance();
$xin->xin();

它的输出,我想读者也能猜到了:

辛星加油调用Xin类的xin函数,辛星你好

如果我们要克隆对象的话,比如下面代码:

<?php
class Xin{
	//保存该类的实例
	private static $_instance;

	//不让外部调用该构造函数
	private function __construct(){
		echo "辛星加油";
	}

    //用于获取实例,必须是静态的,否则外部无法调用
	public static function get_instance(){
		//如果该单例不存在,则创建它
		if(!(self::$_instance instanceof self)){
			self::$_instance = new self;
		}
		//返回它既可
		return self::$_instance;
	}
	//不允许对象被克隆
	public function __clone(){
		trigger_error('Clone Denyed!',E_USER_ERROR);
	}
	//功能函数
	public  function xin(){
		echo "调用Xin类的xin函数,辛星你好";
	}
}


//克隆的时候会报错的
$xin = Xin::get_instance();
$qian = clone $xin;

那么会报错信息如下:

辛星加油
( ! ) Fatal error: Clone Denyed! in D:\MyApp\wamp\www\err.php on line 22
Call Stack

好啦,,鉴于单例模式本身就简单,读者有什么不清楚的可以在下面留言,我会认真解答的。



辛星和您一起解析PHP中的单例模式,布布扣,bubuko.com

辛星和您一起解析PHP中的单例模式

标签:辛星   单例   设计模式   php   模式   

原文地址:http://blog.csdn.net/xinguimeng/article/details/38132323

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!