<?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
관련 기사
16Dec2016
Aravel 프레임워크의 종속성 주입은 실제로 매우 강력하며, 컨테이너를 통해 구현된 종속성 주입을 통해 필요한 서비스를 선택적으로 로드하고 프레임워크 초기화에 따른 오버헤드를 줄일 수 있습니다. 다음은 제가 인터넷에서 본 게시물입니다. 모든 사람과 공유할 수 있습니다.
06Feb2018
PHP에는 클래스, 인터페이스, 함수, 메소드 및 확장을 리버스 엔지니어링하는 기능을 제공하는 완전한 리플렉션 API가 있습니다. 클래스 리플렉션에서 제공하는 기능을 통해 클래스가 정의되는 방법, 클래스에 포함된 속성, 클래스에 포함된 메서드, 메서드에 포함된 매개변수, 클래스 파일에 대한 경로 및 기타 매우 중요한 정보를 알 수 있습니다. 많은 PHP 프레임워크가 종속성 주입을 구현하여 클래스 간의 종속성을 자동으로 해결할 수 있는 것도 클래스 반영 덕분에 일상적인 개발에 큰 편의를 제공합니다.
16May2016
이 글은 주로 PHP 종속성 반전(Dependency Inversion) 코드 예제를 소개합니다. 이 글은 필요한 구현 코드만 제공합니다.
20Apr2018
이 글은 PHP의 내용인 의존성 주입, 제어 반전, 의존성 반전 원리를 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
13Apr2022
이 글은 의존성 주입이 무엇인지, 의존성 주입의 이유, 의존성 주입의 적용 등을 포함하여 의존성 주입과 관련된 문제를 주로 소개하는 PHP 관련 지식을 제공합니다. 모든 사람에게 도움이 되기를 바랍니다.
Hot Tools
50개의 뛰어난 클래식 PHP 알고리즘 모음
클래식 PHP 알고리즘, 훌륭한 아이디어를 배우고 사고력을 확장하세요
이미지 최적화를 위한 작은 PHP 라이브러리
이미지 최적화를 위한 작은 PHP 라이브러리
승리 확률 알고리즘을 위한 PHP 함수 클래스
승리 확률 알고리즘을 위한 PHP 함수 클래스