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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
一棵php的类树(支持无限分类)
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
php搜索文件程序分享
Oct 30 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
PHP常见数组排序方法小结
Aug 20 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 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 过滤器实现代码
2010/08/09 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Django admin美化插件suit使用示例
2017/12/12 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
python判断元素是否存在的实例方法
2020/09/24 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
互动出版网:专业书籍
2017/03/21 全球购物
军训自我鉴定
2013/12/14 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年工商所工作总结
2014/12/09 职场文书
经典爱情感言
2015/08/03 职场文书
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS