事实上单例模式还是用的挺多的,要说到最经典的样例。可能就是操纵数据库的类了,它假设是单例的话,能够避免大量的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. WCF学习笔记之可靠会话

    可靠会话传输需要解决两个问题:重复消息和无序交付:制定WS-RM的一个主要目的就是实现一种模块化 的可靠消息传输机制:WS-RM两个版本(WS-RM1.0和WS-RM1.1): WCF中整个可靠会话的 ...

  2. OpenERP财务管理若干概念讲解

    来自:http://shine-it.net/index.php/topic,2431.0.html 一.记账凭证(Account Move) 会计上的记账凭证,也叫会计分录,在OpenERP中叫&q ...

  3. Java之JVM调优案例分析与实战(3) - 堆外内存导致的溢出错误

    环境:基于B\S的点子考试系统,为了发现客户端能实时地从服务端接收考试数据,系统使用了逆向AJAX技术(也称Comet或Server Side Push),选用CometD1.1.1作为服务端推送框架 ...

  4. tcp 代理的作用

    http://www.h3c.com.cn/Service/Document_Center/IP_Security/FW_VPN/F1000-E/Configure/Operation_Manual/ ...

  5. 〖Android〗巧用/system/etc/mkshrc文件,把busybox常用命令映射(链接)出来;

    在/system/etc/mkshrc文中尾部添加以下代码即可: # for busybox for n in $(busybox --list) do eval alias $n=\'busybox ...

  6. 【TP3.2】路由匹配和规则

    TP3.2框架的路由匹配和规则处理: 包括:静态路由,动态路由,多参数路由.正则路由 <?php return array( //'配置项'=>'配置值' /* * 路由开启和匹配.首先开 ...

  7. 项目启动时 Exception in thread "HouseKeeper" java.lang.NullPointerException

    首先查看是否是端口冲突引起,在日志信息该错误位置往上找,如果再无错误信息,而只有该错误,则原因可能如下: 原因: This is because Proxool is not being shutdo ...

  8. 腾讯QQ的发展与未来

    http://wenku.baidu.com/view/15166ddfc1c708a1284a447d.html 腾讯QQ的发展与未来

  9. JS中的转义字符

    http://www.cnblogs.com/wangpei/archive/2009/05/09/1453260.html \b        退格 \t          TAB,水平 \v    ...

  10. MySQL UUID函数的详解(转)

    MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: ...