欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-04-02 14:09:34
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程序设计有所帮助。