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 相关文章推荐
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
php密码生成类实例
Sep 24 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
轻松实现php文件上传功能
Feb 17 PHP
php实现的顺序线性表示例
May 04 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
PHP如何将XML转成数组
2016/04/04 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
EJB发布WEB服务一般步骤
2012/10/31 面试题
店面出租协议书范本
2014/11/28 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
初中教师个人工作总结
2015/02/10 职场文书
二婚主持词
2015/06/30 职场文书
思品教学工作总结
2015/08/10 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
Django基础CBV装饰器和中间件
2022/03/22 Python