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中使用crypt()实现用户身份验证的代码
Sep 05 PHP
基于Zend的Config机制的应用分析
May 02 PHP
php引用返回与取消引用的详解
Jun 08 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
php插件Xajax使用方法详解
Aug 31 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 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
PHP之数组学习
2011/05/29 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python 把列表转化为字符串的方法
2018/10/23 Python
Python中正则表达式的用法总结
2019/02/22 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python读文件的步骤
2019/10/08 Python
python 实现绘制整齐的表格
2019/11/18 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
毕业证委托书范文
2014/09/26 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
宿舍管理制度范本
2015/08/07 职场文书