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实现与ASP Banner组件相似的类
Oct 09 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
Oct 14 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
php实现Mysql简易操作类
Oct 11 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
php桥接模式应用案例分析
Oct 23 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
apache mysql php 源码编译使用方法
2012/05/03 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
关于Keras Dense层整理
2020/05/21 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
消防安全宣传口号
2014/06/10 职场文书
律师授权委托书范本
2014/10/07 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
vue组件vue-esign实现电子签名
2022/04/21 Vue.js
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js