<?php namespace Auryn; class CachingReflector implements Reflector { const CACHE_KEY_CLASSES = 'auryn.refls.classes.'; const CACHE_KEY_CTORS = 'auryn.refls.ctors.'; const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.'; const CACHE_KEY_FUNCS = 'auryn.refls.funcs.'; const CACHE_KEY_METHODS = 'auryn.refls.methods.'; private $reflector; private $cache; public function __construct(Reflector $reflector = null, ReflectionCache $cache = null) { $this->reflector = $reflector ?: new StandardReflector; $this->cache = $cache ?: new ReflectionCacheArray; } public function getClass($class) { $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class); if (!$reflectionClass = $this->cache->fetch($cacheKey)) { $reflectionClass = new \ReflectionClass($class); $this->cache->store($cacheKey, $reflectionClass); } return $reflectionClass; }
우리의 아이디어는 애플리케이션이 Foo 클래스를 사용할 때 Foo 클래스를 생성하고 Foo 클래스의 메서드를 호출한다는 것입니다. 이 메서드에 Bar 클래스가 필요한 경우 Bar 클래스를 생성하고 Bar 클래스 메서드를 호출합니다. Bim 클래스가 필요한 경우 Bim 클래스를 생성한 후 다른 작업을 수행합니다. 종속성 주입을 사용한다는 아이디어는 애플리케이션이 Foo 클래스를 사용하고 Foo 클래스에는 Bar 클래스가 필요하며 Bar 클래스에는 Bim 클래스가 필요하고 먼저 Bim 클래스를 만든 다음 Bar 클래스를 만들고 Bim을 주입하는 것입니다. 그런 다음 Foo 클래스를 만들고 Bar 클래스를 삽입한 다음 Foo 메서드를 호출하고 Foo는 Bar 메서드를 호출한 다음 다른 작업을 수행합니다. 이것이 제어 반전 패턴입니다. 종속성 제어는 호출 체인의 시작 부분으로 반전됩니다. 이렇게 하면 종속성을 완벽하게 제어할 수 있고 주입된 다양한 개체를 조정하여 프로그램의 동작을 제어할 수 있습니다. 예를 들어 Foo 클래스는 Memcache를 사용하므로 Foo 클래스 코드를 수정하지 않고도 대신 Redis를 사용할 수 있습니다.
종속성 주입 컨테이너를 사용한 후의 아이디어는 애플리케이션이 Foo 클래스에 액세스해야 하는 경우 컨테이너에서 Foo 클래스를 가져오고 컨테이너가 Bim 클래스를 만든 다음 Bar 클래스를 만들고 Bim을 주입한 다음 Foo 클래스에 Bar를 주입한 다음 적용합니다. 프로그램은 Foo 메서드를 호출하고 Foo는 Bar 메서드를 호출한 다음 다른 작업을 수행합니다. 즉, 컨테이너는 인스턴스화, 종속성 주입, 종속성 처리 등을 담당합니다.
이 사이트의 모든 리소스는 네티즌이 제공하거나 주요 다운로드 사이트에서 재인쇄되었습니다. 소프트웨어의 무결성을 직접 확인하십시오! 이 사이트의 모든 리소스는 학습 참고용으로만 사용됩니다. 상업적 목적으로 사용하지 마시기 바랍니다. 그렇지 않으면 모든 결과에 대한 책임은 귀하에게 있습니다! 침해가 있는 경우 당사에 연락하여 삭제하시기 바랍니다. 연락처: admin@php.cn
관련 기사
05Jan2025
이번 시리즈에서는 PHP 객체지향 프로그래밍(OOP)의 기초를 다루겠습니다. 콘텐츠는 순차적인 부분으로 구성되며 각 부분은 특정 주제에 중점을 둡니다. OOP 개념이 처음이거나 익숙하지 않은 분을 위한 이 시리즈는
04Jan2025
PHP 8.4에서 게으른 개체를 사용한 종속성 주입 탐색 최신 PHP 영역에서 버전 8.4 릴리스에는 Lazy Objects라는 획기적인 기능이 도입되었습니다. 이러한 객체를 사용하면 꼭 필요할 때까지 초기화를 연기하는 새로운 방법을 사용할 수 있습니다.
29Jul2016
도서관 관리 시스템 활용 사례 다이어그램: 도서관 관리 시스템 활용 사례 다이어그램 도서관 관리 프로그램(1): 이 수준의 프로그램에서 사용하는 데이터 테이블 구조: # ------ --- --------------------- # # 데이터 테이블 구조 'author' # CREATE TABLE 작성자 ( author_id int (6) DEFAULT '0' NOT NULL auto_increment, first_name varchar(20)
29Jul2016
도서관 관리 시스템 소스 코드: 도서관 관리 시스템 소스 코드 php 무작위 인증 코드 생성 이미지 코드: 다음과 같이 코드를 복사합니다:
29Jul2016
도서관 관리 시스템 수요 분석 : 도서관 관리 시스템 수요 분석 도서 관리 프로그램 (2) : 도서 카탈로그 입력 부분 : if(!$UploadAction): ?> 출판사 데이터. //편집자: Kong Xiuxiang. Date: 2001/3/24 /* session_start(); if (!isset($auth_passed)) { echo "이 기능은 승인된 사용자만 사용할 수 있습니다." } if(isset($u_name)) {
01Nov2024
Go로 도서관 관리 시스템 구축하기 이 기사에서는 Go로 구현된 LMS(라이브러리 관리 시스템)를 살펴보고 핵심 기능, 디자인 결정 및 주요 코드 조각을 강조합니다. 라이브러리 관리의 핵심 기능
Hot Tools
50개의 뛰어난 클래식 PHP 알고리즘 모음
클래식 PHP 알고리즘, 훌륭한 아이디어를 배우고 사고력을 확장하세요
이미지 최적화를 위한 작은 PHP 라이브러리
이미지 최적화를 위한 작은 PHP 라이브러리
승리 확률 알고리즘을 위한 PHP 함수 클래스
승리 확률 알고리즘을 위한 PHP 함수 클래스