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 相关文章推荐
FCKeditor的安装(PHP)
Jan 13 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
smarty半小时快速上手入门教程
Oct 27 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
PHP经典设计模式之依赖注入定义与用法详解
May 21 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 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
日本十大惊悚动漫
2020/03/04 日漫
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
Python 的 Socket 编程
2015/03/24 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
班组拓展活动方案
2014/08/14 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
合作与交流自我评价
2015/03/09 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
Python Pygame实战之塔防游戏的实现
2022/03/17 Python