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的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP邮箱验证示例教程
Jun 01 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP实现的装箱算法示例
Jun 23 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
js 获取html5的data属性实现方法
2017/07/28 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
python简单实现基数排序算法
2015/05/16 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python处理文本换行符实例代码
2018/02/03 Python
python对html过滤处理的方法
2018/10/21 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
个人务虚会发言材料
2014/10/20 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
浅析Python OpenCV三种滤镜效果
2022/04/11 Python
mysql中关键词exists的用法实例详解
2022/06/10 MySQL