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程序中的常见漏洞进行攻击(下)
Oct 09 PHP
WML,Apache,和 PHP 的介绍
Oct 09 PHP
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
PHP APC的安装与使用详解
Jun 13 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
php实现的双色球算法示例
Jun 20 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
php实现统计IP数及在线人数的示例代码
Jul 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
学python爬虫能做什么
2020/07/29 Python
Python-split()函数实例用法讲解
2020/12/18 Python
python基于openpyxl生成excel文件
2020/12/23 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
学校十一活动方案
2014/02/01 职场文书
工地安全检查制度
2014/02/04 职场文书
八项规定整改方案
2014/02/21 职场文书
大学军训感言800字
2014/02/27 职场文书
护士求职信范文
2014/05/24 职场文书
高中学校对照检查材料
2014/08/31 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
学习党章的体会
2014/11/07 职场文书
大二学年个人总结
2015/03/03 职场文书
研讨会通知
2015/04/27 职场文书
祝寿主持词
2015/07/02 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
如何用Python搭建gRPC服务
2021/06/30 Python