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

来源:互联网 发布:克而瑞数据2017年排名 编辑:程序博客网 时间:2024/06/08 04:29
<?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());    }  }

0 0
原创粉丝点击