中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

有哪幾種PHP注冊表模式

發布時間:2021-09-29 13:37:42 來源:億速云 閱讀:127 作者:iii 欄目:開發技術

本篇內容介紹了“有哪幾種PHP注冊表模式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

這里主要按作用域介紹三種類別的注冊表類(請求級別、會話級別、應用程序級別)。

namespace woo\base;

//基類
abstract class Registry {
  abstract protected function get($key);
  abstract protected function set($key,$val);
}

//請求級別,他的生存周期通常為從用戶發起一個請求到后臺程序回復這個請求為止
class RequestRegistry extends Registry{
  private $values = array();
  private static $instance;
  
  private function __construct (){}

  static function instance(){    // 單例,即這個類只有一個唯一的實例
    if(!isset(self::$instance)){
      self::$instance = new self();
    }
    return self::$instance;
  }
  
  protected function get($key){
    if(isset($this->values[$key]){
      return $this->values[$key];
    }
    return null;
  }
  
  protected function set($key,$val){
    $this->values[$key] = $val;
  }
  
  static function getRequest(){
    return self::instance()->get('request');
  }
  
  static function setRequest(\woo\controller\Request $request){      //\woo\controller\Request 主要功能是處理用戶請求信息的一個類
    return self::instance()->set('request',$request);
  }
}

//會話級別,此示例中類的生存周期主要還是看SESSION的生存時間
class SessionRegistry extends Registry{
  private static $instance;
  private function __construct (){
    session_start();
  }
  
  static function instance(){
    if(!isset(self::$instance)){
      self::$instance = new self();
    }
    return self::$instance;
  }
  
  protected function get($key){
    if(isset($_SESSION[__CLASS__][$key])){
      return $_SESSION[__CLASS__][$key];
    }
    return null;
  }
  
  protected function set($key,$val){
    $_SESSION[__CLASS__][$key] = $val;
  }
  
  function setComplex(Complex $complex){
    self::instance()->set('complex',$complex);
  }
  
  function getComplex(){
    return self::instance()->get('complex');
  }
}

//應用程序級別,此示例中因相關的值是保存在文本文件中,所以只要文件存在,保存的值也就一直存在
 class ApplicationRegistry extends Registry{
  private Static $instance;
  private $freezedir = 'data';
  private $values = array();
  private $mtimes = array();

  private function __construct (){}
   
  static function instance(){
    if(!isset(self::$instance)){
      self::$instance = new self();    
    }
    return self::$instance;
  }
  
  protected function get($key){
    $path = $this->freezedir . DIRECTORY_SEPARATOR . $key; // 保存值的文件的路徑
    if(file_exists($path)){
      clearstatcache();     // 清除filemtime緩存的上次記錄的文件修改時間
      $mtime = filemtime($path);
      if(!isset($this->mtimes[$key])){
        $this->mtimes[$key] = 0;
      }
      if($mtime > $this->mtimes[$key]){    // 文件內容假如被修改過,那么就要重新獲取里面的值
        $data = file_get_contents($path);
        $this->mtimes[$key] = $mtime;
        return ($this->values[$key] = unserialize($data));
      }
    }
    if(isset($this->values[$key])){
      return $this->values[$key];
    }
    return null;
  }
  
  protected function set ($key,$val){
    $this->values[$key] = $val;
    $path = $this->freezedir . DIRECTORY_SEPARATOR . $key;
    file_put_contents($path,serialize($val));
    $this->mtimes[$key] = time();
  }
  
  static function getDSN(){
    return self::instance()->get('dsn');
  }
  
  static function setDSN($dsn){
    return self::instance()->set('dsn',$dsn);
  }
   
 }

“有哪幾種PHP注冊表模式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

禄丰县| 尼玛县| 苍梧县| 如东县| 监利县| 建阳市| 鄂尔多斯市| 涞源县| 宾川县| 荥经县| 威信县| 高要市| 潮安县| 德兴市| 尚志市| 宝兴县| 赣州市| 蒙自县| 普兰店市| 托里县| 通许县| 永登县| 慈利县| 丰原市| 林西县| 新昌县| 兴城市| 宝清县| 甘肃省| 泾阳县| 普定县| 顺昌县| 隆林| 湘乡市| 灌南县| 林口县| 廊坊市| 巧家县| 调兵山市| 乐都县| 土默特右旗|