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-MySQL教程归纳总结
Jun 07 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
smarty简单入门实例
Nov 28 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
php curl操作API接口类完整示例
May 21 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 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 获取完整url地址
2008/12/20 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
keras slice layer 层实现方式
2020/06/11 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
护理学专业推荐信
2013/12/03 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
学校就业推荐信范文
2014/05/19 职场文书
校园演讲稿汇总
2014/05/21 职场文书
运动会观后感
2015/06/09 职场文书
红色影片观后感
2015/06/18 职场文书
小学生暑假生活总结
2015/07/13 职场文书
React如何创建组件
2021/06/27 Javascript
python自动化测试之Selenium详解
2022/03/13 Python