事实上单例模式还是用的挺多的,要说到最经典的样例。可能就是操纵数据库的类了,它假设是单例的话,能够避免大量的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中的单例模式的更多相关文章

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

    前面我在解读CSS中也说过了关于相对定位和绝对定位的问题.无奈还是有些童鞋表示迷茫,于是另开一篇博客,来具体解读相对定位和绝对定位.希望可以以我的点点星光,让后来者少走弯路. 所谓相对定位,就是设置为 ...

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

    浮动,是CSS布局中必须经过的一道坎,假设不熟悉浮动.那么CSS的布局就如同空中楼阁,而谈到浮动,很多其它的是和div相结合,div是一个块级元素.这个我前面的博文有介绍,假设大家喜欢我的风格,能够搜 ...

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

    刚才看到有位网友非常纳闷第二个棕色三角形是怎么定位的,我当感觉在以下说不清楚,就特别开了一片博客.来说清楚它.首先,前面的代码我们先抄下来,至于前面这部分代码是怎么来的,读我的用CSS制作面包屑导航的 ...

  4. 辛星浅谈mysql中的数据碎片以及引擎为MyISAM下的操作

    对于mysql中的数据碎片,事实上和我们删除数据是息息相关的,删除数据的时候必定会在数据文件里造成不连续的空白空间,对于少量的数据的删除,并不会产生多少的空白空间.假设在一段时间内的大量的删除操作,会 ...

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

    这里我已经写好它的pdf版本号了,比本博客更加适合阅读.首先说一下它在百度网盘的下载地址把:百度网盘下载 ,假设左边连接跪了.能够在浏览器中输入:http://pan.baidu.com/s/1qW5 ...

  6. 2014年辛星完全解读Javascript第一节

    ***************概述*************** 1.Javascript是一种原型化继承的基于对象的动态类型的脚本语言,它区分大小写,主要运行在客户端,用户即使响应用户的操作并进行数 ...

  7. 2014年度辛星html教程夏季版第三节

    接下来我们继续学习HTML中的标签,希望大家能够再接再厉,同时辛星也会支持大家,我们一起努力,一起加油.我们本小节来认识另外几个标签. *************空格和换行************** ...

  8. 2014年度辛星html教程夏季版第一节

    从今天起开始在博客园开启自己的html教程啦,先从第一节开始把,首先推荐一个网站,就是http:/www.w3cschool.cc,这是一个公开的教学网站,但是它有一个问题,那就是虽然很全面,但是不是 ...

  9. 【2014】【辛星】【php】【秋季】【2】第一个php程序

    <span style="font-family:KaiTi_GB2312;font-size:18px;">*******************设置server** ...

随机推荐

  1. Laravel 隐藏域如何实现?

    Laravel 隐藏域如何实现?   在 Blade 模板中,我们可以使用 method_field 方法来创建隐藏域.   {{ method_field('DELETE') }} 其转化为 HTM ...

  2. taro 打包微信小程序运行失败(一)

    1.报错信息 thirdScriptError sdk uncaught third Error Cannot read property 'createTextNode' of undefined ...

  3. 【故障处理141119】一次数据库不繁忙时一条sql语句2个运行计划导致业务超时的故障处理

    1,故障描写叙述: 一条select有两个运行计划.在sqlplus中运行选择好的运行计划.仅仅要40毫秒.而在程序中运行选择了差的运行计划,要1分23秒左右,导致前台业务超时报错. 2.故障解决: ...

  4. 一个事件激活多个JavaScript函数

    http://www.cnblogs.com/meil/archive/2006/09/20/509359.html如果你的网页中一个“OnLoad”事件要激活两个以上的JavaScript函数,那怎 ...

  5. mysql优化 慢查询(一)

    1.显示慢查询的一些参数的命令:show variables like '%slow%';结果如图

  6. Linux命令-文件处理命令:touch

    touch chengshi.list 在当前目录中创建chengshi.list文件 touch /root/chengshi.list 在root目录下面创建chengshi.list文件 tou ...

  7. storyboard,xib

    1. 从xib的viewcontroll中启动storyboard 或者 从一个storyboard切换到另一个storyboard: – (IBAction)openStoryboard:(id)s ...

  8. C#:消息框

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  9. 关闭危害的端口DOS命令(转载)

    rem ipseccmd -w REG -p "HFUT_SECU" -r "Block UDP/137" -f *+0:137:UDP -n BLOCK -x ...

  10. JEECG与帆软报表集成

    将FineReport 集成到自己的web项目中,生成报表,可以方便快捷的和自己的项目融合在一起.简化了利用poi的导出遇到的问题. 1.首先在FR中建立好一个模板      例如:我的这张模板是连接 ...