最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

老生常談PHP面向?qū)ο笾?cè)表模式

 更新時(shí)間:2017年05月26日 08:09:48   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇老生常談PHP面向?qū)ο笾?cè)表模式。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

注冊(cè)表模式可似把他想像成一個(gè)全局變量,所有的模塊都從這個(gè)全局變量里存取數(shù)據(jù),或者也可以想象成某個(gè)酒吧的許愿墻或留言版,上面的內(nèi)容大家都可以看到,也可以改寫(xiě)。這里主要按作用域介紹三種類別的注冊(cè)表類(請(qǐng)求級(jí)別、會(huì)話級(jí)別、應(yīng)用程序級(jí)別)。

namespace woo\base;

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

//請(qǐng)求級(jí)別,他的生存周期通常為從用戶發(fā)起一個(gè)請(qǐng)求到后臺(tái)程序回復(fù)這個(gè)請(qǐng)求為止
class RequestRegistry extends Registry{
  private $values = array();
  private static $instance;
  
  private function __construct (){}

  static function instance(){    // 單例,即這個(gè)類只有一個(gè)唯一的實(shí)例
    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 主要功能是處理用戶請(qǐng)求信息的一個(gè)類
    return self::instance()->set('request',$request);
  }
}

//會(huì)話級(jí)別,此示例中類的生存周期主要還是看SESSION的生存時(shí)間
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');
  }
}

//應(yīng)用程序級(jí)別,此示例中因相關(guān)的值是保存在文本文件中,所以只要文件存在,保存的值也就一直存在
 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緩存的上次記錄的文件修改時(shí)間
      $mtime = filemtime($path);
      if(!isset($this->mtimes[$key])){
        $this->mtimes[$key] = 0;
      }
      if($mtime > $this->mtimes[$key]){    // 文件內(nèi)容假如被修改過(guò),那么就要重新獲取里面的值
        $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面向?qū)ο笾?cè)表模式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

霍山县| 西乌珠穆沁旗| 靖西县| 高邮市| 无棣县| 松滋市| 承德市| 昭苏县| 武定县| 留坝县| 灵石县| 乌兰察布市| 沽源县| 常德市| 绵阳市| 宾川县| 韶关市| 剑川县| 雷波县| 遂平县| 山阴县| 南康市| 镶黄旗| 洪洞县| 温泉县| 乳源| 东阿县| 四会市| 南汇区| 化州市| 长武县| 江华| 巢湖市| 肇州县| 石屏县| 林芝县| 五河县| 河南省| 潞城市| 荃湾区| 芦溪县|