老生常談PHP面向?qū)ο笾员砟J?/h1>
更新時(shí)間:2017年05月26日 08:09:48 投稿:jingxian
下面小編就為大家?guī)硪黄仙U凱HP面向?qū)ο笾员砟J?。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
注冊表模式可似把他想像成一個(gè)全局變量,所有的模塊都從這個(gè)全局變量里存取數(shù)據(jù),或者也可以想象成某個(gè)酒吧的許愿墻或留言版,上面的內(nèi)容大家都可以看到,也可以改寫。這里主要按作用域介紹三種類別的注冊表類(請求級(jí)別、會(huì)話級(jí)別、應(yīng)用程序級(jí)別)。
namespace woo\base;
//基類
abstract class Registry {
abstract protected function get($key);
abstract protected function set($key,$val);
}
//請求級(jí)別,他的生存周期通常為從用戶發(fā)起一個(gè)請求到后臺(tái)程序回復(fù)這個(gè)請求為止
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 主要功能是處理用戶請求信息的一個(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)容假如被修改過,那么就要重新獲取里面的值
$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ū)ο笾员砟J骄褪切【幏窒斫o大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
-
Yii2針對游客、用戶防范規(guī)則和限制的解決方法分析
這篇文章主要介紹了Yii2針對游客、用戶防范規(guī)則和限制的解決方法,簡單分析了Yii2對于游客、用戶防范規(guī)則和限制的原理與相應(yīng)的設(shè)置方法,需要的朋友可以參考下 2016-10-10
-
thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫的方法
這篇文章主要介紹了thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式分析了thinkPHP使用pclzip操作壓縮文件的相關(guān)技巧,需要的朋友可以參考下 2016-04-04
-
php切割頁面div內(nèi)容的實(shí)現(xiàn)代碼分享
今天在百度知道看到一個(gè)關(guān)于php獲取DIV內(nèi)容的問題,做了一晚,終于是做出來了 2012-07-07
-
php調(diào)用百度人臉識(shí)別接口查詢數(shù)據(jù)庫人臉信息實(shí)現(xiàn)驗(yàn)證登錄功能
這篇文章主要介紹了php調(diào)用百度人臉識(shí)別接口查詢數(shù)據(jù)庫人臉信息實(shí)現(xiàn)驗(yàn)證登錄功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2020-01-01
最新評(píng)論
注冊表模式可似把他想像成一個(gè)全局變量,所有的模塊都從這個(gè)全局變量里存取數(shù)據(jù),或者也可以想象成某個(gè)酒吧的許愿墻或留言版,上面的內(nèi)容大家都可以看到,也可以改寫。這里主要按作用域介紹三種類別的注冊表類(請求級(jí)別、會(huì)話級(jí)別、應(yīng)用程序級(jí)別)。
namespace woo\base; //基類 abstract class Registry { abstract protected function get($key); abstract protected function set($key,$val); } //請求級(jí)別,他的生存周期通常為從用戶發(fā)起一個(gè)請求到后臺(tái)程序回復(fù)這個(gè)請求為止 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 主要功能是處理用戶請求信息的一個(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)容假如被修改過,那么就要重新獲取里面的值 $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ū)ο笾员砟J骄褪切【幏窒斫o大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Yii2針對游客、用戶防范規(guī)則和限制的解決方法分析
這篇文章主要介紹了Yii2針對游客、用戶防范規(guī)則和限制的解決方法,簡單分析了Yii2對于游客、用戶防范規(guī)則和限制的原理與相應(yīng)的設(shè)置方法,需要的朋友可以參考下2016-10-10thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫的方法
這篇文章主要介紹了thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式分析了thinkPHP使用pclzip操作壓縮文件的相關(guān)技巧,需要的朋友可以參考下2016-04-04php切割頁面div內(nèi)容的實(shí)現(xiàn)代碼分享
今天在百度知道看到一個(gè)關(guān)于php獲取DIV內(nèi)容的問題,做了一晚,終于是做出來了2012-07-07php調(diào)用百度人臉識(shí)別接口查詢數(shù)據(jù)庫人臉信息實(shí)現(xiàn)驗(yàn)證登錄功能
這篇文章主要介紹了php調(diào)用百度人臉識(shí)別接口查詢數(shù)據(jù)庫人臉信息實(shí)現(xiàn)驗(yàn)證登錄功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01