php设计模式之单例模式代码


Posted in PHP onJune 11, 2016

php设计模式之单例模式的例子,供大家参考,具体内容如下

<?php
  /**
   * php设计模式 单例模式
   */
  class Fruit{
    private static $instanceMap = array();

    //protected getter for singleton instances
    protected static function getSingleton($className){
      //保证单例模式 并且不能从控制器实例化和克隆
      if (!isset(self::$instanceMap[$className])) {
        $object = new $className;
        //Make sure this object inherit from Singleton
        if ($object instanceof Fruit) {
          self::$instanceMap[$className] = $object;
          var_dump($object);
        } else {
          throw SingletonException("Class '$className' do not inherit from Singleton!");
        }
      }
      return self::$instanceMap[$className];
    }

    //protected constructor to prevent outside instantiation
    protected function __construct(){}

    //denie cloning of singleton objects
    public final function __clone(){
      trigger_error('It is impossible to clone singleton', E_USER_ERROR);
    }
  }

  class Apple extends Fruit{
    protected $rndId;

    public function __construct(){
      $this->rndId = rand();
    }

    public function whatAmI(){
      echo 'I am a Apple(' . $this->rndId . ')<br />';
    }

    public static function getInstance(){
      //echo get_class();
      return Fruit::getSingleton(get_class());
    }
  }

  class GreenApple extends Apple{
    public function whatAmI(){
      echo 'I am a GreenApple(' . $this->rndId . ')<br />';
    }

    public static function getInstance(){
      return Fruit::getSingleton(get_class());
    }
  }

  $apple1 = Apple::getInstance();
  //var_dump($apple1);
  $apple2 = GreenApple::getInstance();
  $apple1->whatAmI();// should echo 'I am a Apple(some number)
  $apple2->whatAmI();// should echo 'I am a GreenApple(some number)
  $apple1 = Apple::getInstance();
  $apple2 = GreenApple::getInstance();
  //保证单例模式
  $apple1->whatAmI();// should echo 'I am a Apple(same number as above)
  $apple2->whatAmI();// should echo 'I am a GreenApple(same number as above)
  // $a = clone $apple1;// this should fail
  // $b = clone $apple2;// this should fail

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
基于PHP对XML的操作详解
Jun 07 PHP
PHP中文编码小技巧
Dec 25 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
php实现随机生成易于记忆的密码
Jun 19 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
thinkphp 框架数据库切换实现方法分析
May 18 PHP
浅谈PHP Cookie处理函数
Jun 10 #PHP
php单例模式的简单实现方法
Jun 10 #PHP
PHP操作mysql数据库分表的方法
Jun 09 #PHP
浅谈PHP链表数据结构(单链表)
Jun 08 #PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 #PHP
WordPress分页伪静态加html后缀
Jun 08 #PHP
php 流程控制switch的简单实例
Jun 07 #PHP
You might like
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
PHP内置加密函数详解
2016/11/20 PHP
如何离线执行php任务
2017/02/21 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
python元组操作实例解析
2014/09/23 Python
Python验证码识别处理实例
2015/12/28 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Linux如何为某个操作添加别名
2015/02/05 面试题
电大自我鉴定
2013/10/27 职场文书
行政管理人员精品工作推荐信
2013/11/04 职场文书
护士毕业生自荐信
2014/02/07 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
八年级英语教学反思
2016/02/15 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis