辛星和您一起解析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中的单例模式

时间: 2024-08-26 04:25:18

辛星和您一起解析PHP中的单例模式的相关文章

辛星彻底帮您解决CSS中的浮动问题

浮动,是CSS布局中必须经过的一道坎,如果不熟悉浮动,那么CSS的布局就如同空中楼阁,而谈到浮动,更多的是和div相结合,div是一个块级元素,这个我前面的博文有介绍,如果大家喜欢我的风格,可以搜索下. 下面我们进入正题,所谓浮动,可以用css的属性float来定义,比如float:left就是向左浮动,float:right就是向右浮动,我们先看一个不浮动的例子把,首先是这个html文件,这个文件我们是一直都不会动它了,它的内容如下: <html> <head> <link

辛星与您彻底分析PHP中的include和require等的区别

首先说一下require吧,我们知道如果它引入的文件不存在,将会导致程序无法继续执行,因此它通常放在程序的最前面,通常是一些特别重要的部分,比如连接数据库库,比如加载配置文件,比如引用核心函数库等等. 然后说一下include把,它引入成功与否并不重要,因此它和html的特点很接近,可以用于程序的开头,当然很多时候我们是需要引用的时候才include进来,这样,它的位置也就更加随意一些,可以放在中间. 还有一个include_once,它的开销比include 大得多,为什么呢,因为它会检测该文

辛星跟您彻底解决CSS中的浮动(下)

上面一篇博文,我们讲解了如何使用CSS中的浮动,这一篇我们来讲解一下如何清除CSS中的浮动,其实CSS中的浮动的清楚很简单,只需要使用clear属性就可以了,至于怎么用好它,很多人可能一投雾水,我在初学的时候也是经常找不着北,就好像清除浮动是个随机事件一样,当然,它不是,它的规律性很强,就让辛星来给您剖析一下这个规律把. 首先还是上面的HTML文件,它的内容如下: <html> <head> <link rel="stylesheet" type=&quo

辛星和你彻底搞清CSS中的相对定位和绝对定位

前面我在解读CSS中也说过了关于相对定位和绝对定位的问题,无奈还是有些童鞋表示迷茫,于是另开一篇博客,来详细解读相对定位和绝对定位,希望能够以我的点点星光,让后来者少走弯路. 所谓相对定位,就是设置为相对定位的元素会偏移某个距离,元素仍然保持原来的样式,它会保留该HTML元素的空间,比如我们看如下代码: .demo{ position: relative; width:50px; height: 50px; left:50px; } 它会出现在相对原来的地方向右50px的地方,而它原来所在的地方

辛星解析动态查看php中的变量、常量、函数、类、文件等信息

当我们php工作量变大之后,经常需要判断我们是否定义过某个变量,我们是否定义过某个常量,或者说我们是否定义过某个函数等等,我们重复定义常量会导致错误,我们重复定义变量会导致前面的值被覆盖,因此,还是很有必要去了解这些函数的. 比如说我在我的starphp框架里写一个文件,代码如下: <?php echo "当前用户定义的常量"; $user_constants = get_defined_constants(TRUE); print_r($user_constants['user

辛星跟您解析在CSS面包屑中三角形的定位问题

刚才看到有位网友很纳闷第二个棕色三角形是怎么定位的,我当感觉在下面说不清楚,就特别开了一片博客,来说清楚它.首先,前面的代码我们先抄下来,至于前面这部分代码是怎么来的,读我的用CSS制作面包屑导航的那篇博文,如果不明白,可以问我,我会解释的. 首先是html代码,我们直接拿过来,粘贴一下: <html> <head> <title>辛星手写CSS面包屑</title> <link rel="stylesheet" type=&quo

跟着辛星解读PHP中json的使用

由于json是那么的重要,因此PHP自从5.2就增加了对JSON的支持,主要包括两个函数:json_encode和json_decode.众所周知,json是一种数据的存储格式,我的博文里写过json的,在我的Javascript教程中,不明白的读者可以去搜一下. 比如我们新建一个xin.json文件,存储数据如下: [{"name":"辛星","age":23},{"name":"小倩","ag

辛星浅谈mysql中的元数据

首先解释一下什么是元数据,所谓元数据,就是表示数据的数据,这些数据五花八门,总之,只要不是我们存储到数据库里的数据,大多都可以理解为元数据.那么我们如何来获取这些元数据呢? 总的来说,有三种思路,第一种,各种show,第二种,各种select,第三种,是mysql的命令行下的命令,不是sql语句. 我们首先看第一种,这里我列举一下大家比较熟悉的show语句的用法,其实咱们经常用show来查看信息,比如: show databases; show tales; show create table

辛星解读之php中的重点函数第一节之数组函数

这里我已经写好它的pdf版本了,比本博客更加适合阅读.首先说一下它在百度网盘的下载地址把:百度网盘下载 ,如果左边连接跪了,可以在浏览器中输入:http://pan.baidu.com/s/1qW5AYzM 来下载.然后说一下它在csdn的下载地址,是免积分的奥,下载地址:csdn资源下载处 ,如果连接不起作用,可以在浏览器输入:http://download.csdn.net/detail/xinguimeng/7697309  来手动下载. 好,我们知道php中函数还是很多的,正是这些函数为