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 相关文章推荐
无数据库的详细域名查询程序PHP版(2)
Oct 09 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
Symfony的安装和配置方法
Mar 17 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
PHP接入微信H5支付的方法示例
Oct 28 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
在JavaScript中调用php程序
2009/03/09 PHP
php画图实例
2014/11/05 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
JS中==、===你分清楚了吗
2020/03/04 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
Python Web编程之WSGI协议简介
2018/07/18 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
HTML5标签小集
2011/08/02 HTML / CSS
互动出版网:专业书籍
2017/03/21 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
你懂得怎么写自荐信吗?
2013/12/27 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
学校政风行风整改方案
2014/10/25 职场文书
数学教师求职信范文
2015/03/20 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
考试没考好检讨书
2015/05/06 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
政协常委会议主持词
2015/07/03 职场文书
公司借款担保书
2015/09/22 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书