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读取msn上的用户信息类
Dec 05 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
php数据库抽象层 PDO
May 07 PHP
php eval函数一句话木马代码
May 21 PHP
为你总结一些php系统类函数
Oct 21 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
Python实现读取json文件到excel表
2017/11/18 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
Python函数和模块的使用总结
2019/05/20 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
python中的yield from语法快速学习
2020/11/06 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
.NET现在共支持多少种语言
2014/02/26 面试题
毕业生护理专业个人求职信范文
2014/01/04 职场文书
初中语文教学反思
2014/02/02 职场文书
考试违纪检讨书
2014/02/02 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
门卫岗位职责
2015/02/09 职场文书
公司更名通知函
2015/04/24 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
个人工作决心书
2015/09/22 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang