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 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
基于php验证码函数的使用示例
May 03 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
php实现的debug log日志操作类实例
Jul 12 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
php 的多进程操作实践案例分析
Feb 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
2019/08/07 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
校优秀毕业生主要事迹
2014/05/26 职场文书
新农村建设汇报材料
2014/08/15 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python