php设计模式之单例模式代码

 更新时间:2016年06月11日 09:50:21   作者:dongxiaojie  
这篇文章主要为大家详细介绍了php设计模式之单例模式的实现代码,具有一定的参考价值,感兴趣的朋友可以参考一下

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树形结构tree类用法示例

    PHP树形结构tree类用法示例

    这篇文章主要介绍了PHP树形结构tree类用法,结合实例形式分析了php无限分类树tree.class.php的定义及使用相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • php递归如何获取无限上级ID

    php递归如何获取无限上级ID

    这篇文章主要介绍了php递归如何获取无限上级ID,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • php常用字符串查找函数strstr()与strpos()实例分析

    php常用字符串查找函数strstr()与strpos()实例分析

    这篇文章主要介绍了php常用字符串查找函数strstr()与strpos(),结合具体实例形式分析了php字符串查找函数strstr()与strpos()的具体功能、用法、区别及相关操作注意事项,需要的朋友可以参考下
    2019-06-06
  • php从字符串创建函数的方法

    php从字符串创建函数的方法

    这篇文章主要介绍了php从字符串创建函数的方法,涉及php中字符串与create_function函数的使用技巧,需要的朋友可以参考下
    2015-03-03
  • php实现简单洗牌算法

    php实现简单洗牌算法

    本篇文章是对php实现简单洗牌算法的程序代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php商品对比功能代码分享

    php商品对比功能代码分享

    前段时间,朋友叫我帮他写个商品对比功能,当时正好在逛绿森数码商城,点开商品列表,看到有商品对比功能,然后直接下载了他的JS滚动文件和抽出了对比框的样式,然后自己完善了下。
    2015-09-09
  • php对gzip文件或者字符串解压实例参考

    php对gzip文件或者字符串解压实例参考

    要采集一个网站,目标站采用了gzip压缩传输网页,本来应该只要发送一个http头 Accept-Encoding: identity或者干脆不发送这个头等,就可以使目标站返回没有经过gzip压缩的页面了,不过很不幸,目标站无视客户端的请求,仍然返回gzip数据,造成乱码。
    2008-07-07
  • Linux下CoreSeek及PHP扩展模块的安装

    Linux下CoreSeek及PHP扩展模块的安装

    前提条件是系统己安装完成apache mysql php的WEB服务。我是以yum来安装的。如果你没有安装过请按照下面给出的链接先完成基本的LAMP环境的安装
    2012-09-09
  • php上传图片到指定位置路径保存到数据库的具体实现

    php上传图片到指定位置路径保存到数据库的具体实现

    本文为大家介绍下php上传图片到指定位置路径保存到数据库的具体实现,感兴趣的朋友不要错过
    2013-12-12
  • 详解PHP的Laravel框架中Eloquent对象关系映射使用

    详解PHP的Laravel框架中Eloquent对象关系映射使用

    这篇文章主要介绍了PHP的Laravel框架中Eloquent对象关系映射使用,重点讲述了Eloquent的数据模型间关系,需要的朋友可以参考下
    2016-02-02

最新评论