class B{
public $v1 = ; private static $instance; private function __construct(){}
public static function getNew(){
//如果本类中的$instance还没有数据
if( !isset(B::$instance) ){
B::$instance = new self;
}
return B::$instance;
}
private function __clone(){}
}
//$o1 = new B();//出错,因为构造方法私有了,
$o1 = B::getNew();
$o1->v1 = ; //修改
$o2 = B::getNew();
var_dump($o1);
echo "<br />";
var_dump($o2);
$o3 = clone $o1; //克隆对象
echo "<br />";
var_dump($o3);
$o1->v1 = ;
echo "<br />o1中的v1为:" . $o1->v1;
echo "<br />o2中的v1为:" . $o2->v1;
echo "<br />o3中的v1为:" . $o3->v1;

然后结果截图:

但是,有一个问题,虽然单例模式可以让类只是实例化一次,但是每一个类都有一个魔法函数clone,那么就可以创建的新的类,所以,我们要防止用clone创建新的类,就有了在我们的单例模式类里面给那个clone函数变成私有的,这样,我们在这类的外面就不能用clone函数了,代码如下:

 class B{
public $v1 = ; private static $instance; private function __construct(){}
public static function getNew(){
//如果本类中的$instance还没有数据
if( !isset(B::$instance) ){
B::$instance = new self;
}
return B::$instance;
}
//下面的这个private就是将clone变成私有的,在类的外面就不能用clone克隆了。
private function __clone(){}
}

50)PHP,单例模式的更多相关文章

  1. 【转载】 Java线程面试题 Top 50

    Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...

  2. Java线程面试题 Top 50 (转载)

    转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html   本文由 ...

  3. 50 道 Java 线程面试题(转载自牛客网)

    下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...

  4. Java线程面试题 Top 50

    转自:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java ...

  5. iOS设计模式反思之单例模式的进化

    什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要调用相关的函数也得经过它.学术一点就是,单例模式,为某一类 需求和数据提供了统一的程序接口.主要 ...

  6. 【多线程】Java线程面试题 Top 50(转载)

    Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html   本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎 ...

  7. Java线程面试题 Top 50(转载)

    原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的 ...

  8. 50个Java多线程面试题

    不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎.大多数待遇丰厚的 Java 开发职位都要求开发者 ...

  9. [转]allocWithZone 和 单例模式

    一.问题起源 一切起源于Apple官方文档里面关于单例(Singleton)的示范代码:Creating a Singleton Instance. 主要的争议集中在下面这一段: ? 1 2 3 4 ...

随机推荐

  1. UVA - 10285 Longest Run on a Snowboard(最长的滑雪路径)(dp---记忆化搜索)

    题意:在一个R*C(R, C<=100)的整数矩阵上找一条高度严格递减的最长路.起点任意,但每次只能沿着上下左右4个方向之一走一格,并且不能走出矩阵外.矩阵中的数均为0~100. 分析:dp[x ...

  2. OpenCV2基础操作----直线、矩形、圆、椭圆函数的使用

    opencv2几个画图函数的调用 要用到几个随机变量: int fr = rand()%frame.rows; int fc = rand()%frame.cols; int b = rand()%2 ...

  3. Ubuntu无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

    转自:http://hi.baidu.com/xiaobaishu 鸣谢: xuleibjtu2010的原创空间 1.终端输入 ps  -aux ,列出进程.找到含有apt‘-get的进程,直接sud ...

  4. JDK8 API离线文档免费下载&JavaEE API文档离线下载&API在线查看链接&常用的JAR包下载

    1.JDK8 API离线文档 链接:https://pan.baidu.com/s/1fYc-QesmYRumTEPmnSgEKA 提取码:2bdr 2.JavaEE API文档离线下载 链接:htt ...

  5. 前后端分离java、jwt项目进行CORS跨域、解决非简单请求跨域问题、兼容性问题

    情况描述: 最近在部署一个前后端分离的项目出现了跨域问题*, 项目使用jwt进行鉴权,需要前端请求发起携带TOKEN的请求*,请求所带的token无法成功发送给后端, 使用跨域后出现了兼容性问题:Ch ...

  6. 代码review还是需要再仔细点-一次crash异常分析的总结

    版本发布之后,外网新增了一些crash, 从mini dump看,的确是有异常的,619行crash了. 代码如下: 奔溃的地方如下 可以看到是Zip add的时候指针空了, 为什么呢? 结合代码,可 ...

  7. go语言实现leetcode-242

    package main import ( "fmt" "reflect" ) func isAnagram(s string, t string) bool ...

  8. h5-立方体

    1.制作一个立方体:首先要有6个面 <div class="box"> <div class="front">front</div ...

  9. Windows Java桌面应用程序集成slf4j实现日志持久化

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 Windows上一般的应用程序也可以通过日志系统打印日志到指定文件.通过这个例子想说明,问题处理的方法是多 ...

  10. CodeForces - 1243D. 0-1 MST(补图连通分量个数)

    Ujan has a lot of useless stuff in his drawers, a considerable part of which are his math notebooks: ...