>  기사  >  백엔드 개발  >  레지스트리 모드 정보

레지스트리 모드 정보

WBOY
WBOY원래의
2016-08-08 09:32:451590검색
일반적으로 애플리케이션은 다음과 같은 수준으로 나눌 수 있습니다.
1. 전면 모습
2. 명령제어
3.비즈니스 로직
4.데이터 처리
프런트 엔드 보기는 사용자 데이터를 표시하고 사용자 입력 데이터를 수집하여 명령 및 제어 계층에 제출하는 역할을 합니다. 명령 제어 계층은 데이터를 수신하고 일련의 처리를 수행하며 비즈니스 논리 계층에 특정 작업을 완료하도록 맡깁니다. 비즈니스 로직 계층은 데이터 처리 모듈을 호출하여 사용자 데이터 저장을 완료합니다.
하지만 프런트 엔드에서 제출한 데이터를 어떻게 여러 수준에서 직접적이고 적절하게 전송할 수 있습니까? 하나는 이전 명령 모드에서 제공하는 컨텍스트 클래스를 통해 매개변수를 컨텍스트 개체에 배치하고 이를 명령 제어 계층에서 비즈니스 논리 계층으로 전달하는 것입니다. 맥락. 두 번째 방법은 해당 데이터 전송에 맞게 명령 개체의 인터페이스를 수정하는 것입니다. 이 두 가지 방법은 때때로 캡슐화를 깨뜨립니다. 우리는 싱글톤 패턴이 전역 변수에 접근하는 또 다른 방법을 제공한다는 것을 알고 있습니다. 정적 변수는 로컬에 숨겨져 있으며 인터페이스를 통해 쉽게 설정하고 얻을 수 있습니다. 등록 모드(Registry)는 이러한 편리함을 활용합니다.

여기서 등록 모드를 컨텍스트 개체의 싱글톤 버전으로 생각할 수도 있습니다.

간단한 레지스트리 구현:

	abstract class Registry{
		abstract protected function get($key);
		abstract protected function set($key, $value);
	}
PHP는 세 가지 유형의 객체 데이터 수명 주기를 지원합니다. 하나는 HTTP 요청 수신에서 시작하여 요청이 처리된 후에 종료됩니다. 다른 하나는 세션 수준 개체를 지원하는 것입니다. 즉, 개체 데이터를 세션에 저장할 수 있고 PHP는
에 있습니다. session_start 동안 쿠키에 저장된 세션 ID를 기반으로 다양한 객체 데이터가 복원됩니다. 이를 통해 동일한 사용자가 동일한 객체 데이터에 여러 번 액세스를 요청하는 목적을 달성할 수 있습니다. 응용 프로그램 범위 수준도 있습니다. 즉, 동일한 애플리케이션의
여러 사용자가 동일한 개체 데이터를 공유할 수 있습니다. 이 작업을 완료하려면 PHP에 내장된 직렬화 기능이 필요합니다.


단일 HTTP 요청 기반 데이터 등록 모드:

class RequestRegistry extends Registry{
		private static $instance;
		private $values = array();
		
		private function __construct(){}
		
		static public 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, $value){
			$this->values[$key] = $value;
		}
		
		static function set_request(Request $request){
			self::$instance->set('request', $request);
		}
		
		static function get_request(){
			return self::$instance->get('request');
		}
	}
세션 요청 등록 양식:


class SessionRegistry extends Registry{
		private $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, $value){
			$_SESSION[__CLASS__][$key] = $value;
		}
		
		public function set_complex(Complex $complex){
			self::$instance->set('complex', $complex);
		}
		
		public function get_complex(){
			return self::$instance->get('complex');
		}
	}
애플리케이션 수준 레지스트리를 지원합니다.


class ApplicationRegistry extends Registry{
		
		private $dir = "data";
		private static $instance;
		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 set($key, $value){
			$this->values[$key] = $value;
			$path = $this->dir . DIRECTORY_SEPARATOR . $key;
			file_put_contents($path, serialize($value));
			$this->mtimes[$key] = time();
		}
		
		protected function get($key){
			$path = $this->dir . DIRECTORY_SEPARATOR . $key;
			if(file_exists($path)){
				$mtime = filetime($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;
		}
		
		static function get_dsn(){
			return self::$instance->get('dsn');
		}
		
		static function set_dsn($dsn){
			self::$instance->set('dsn', $dsn);
		}
	}
끝.


위의 내용은 레지스트리 모드를 소개하며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.