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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
php5.2时间相差8小时
Jan 15 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 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之CodeIgniter学习笔记
2013/06/17 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
requireJS使用指南
2016/04/27 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
python利用tkinter实现屏保
2019/07/30 Python
python中eval与int的区别浅析
2019/08/11 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
董事长秘书岗位职责
2013/11/29 职场文书
简历自我评价怎么写好呢?
2014/01/04 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
租赁协议书范本
2014/04/22 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
python神经网络ResNet50模型
2022/05/06 Python