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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
php 中文和编码判断代码
May 16 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
php文件上传简单实现方法
Jan 24 PHP
php筛选不存在的图片资源
Apr 28 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
php实现微信模板消息推送
Mar 30 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
Jun 22 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 PHP
PHP实现简单注册登录系统
Dec 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
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
js获取内联样式的方法
2015/01/27 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
python检测服务器是否正常
2014/02/16 Python
从零学Python之入门(四)运算
2014/05/27 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Python读写文件基础知识点
2019/06/10 Python
Django 再谈一谈json序列化
2020/03/16 Python
python 深度学习中的4种激活函数
2020/09/18 Python
python实现简单遗传算法
2020/09/18 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
网络工程师专家职业发展路线
2014/02/14 职场文书
2016年情人节广告语
2016/01/28 职场文书
python非标准时间的转换
2021/07/25 Python
MySQL创建表操作命令分享
2022/03/25 MySQL
Oracle 多表查询基本语法实例
2022/04/18 Oracle
Nginx配置使用详解
2022/07/07 Servers