Home > Backend Development > PHP Tutorial > 辛星和您一行解析PHP中的单例模式

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

WBOY
Release: 2016-06-13 12:03:03
Original
909 people have browsed it

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

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

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

<?phpclass 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(&#39;Clone Denyed!&#39;,E_USER_ERROR);	}	//功能函数	public  function xin(){		echo "调用Xin类的xin函数,辛星你好";	}}//正确的调用方式$xin = Xin::get_instance();$xin->xin();
Copy after login

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

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

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

<?phpclass 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(&#39;Clone Denyed!&#39;,E_USER_ERROR);	}	//功能函数	public  function xin(){		echo "调用Xin类的xin函数,辛星你好";	}}//克隆的时候会报错的$xin = Xin::get_instance();$qian = clone $xin;
Copy after login

那么会报错信息如下:

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

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



Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template