laravel 소스 코드 학습 의존 주입 보기
초심
최근 에 디자인 모델 에서 의 의존 주입 을 보고 디자인 모델 의 신기 한 마력 을 빌려 하나의 목적 을 달성 하고 이 를 배 우 는 과정 에서 보 너 스 를 얻 을 수 있 기 를 바 랍 니 다.이 목적 은 바로 자신 이 디자인 한 시스템 을 더욱 간단 하고 쉽게 이해 하거나 시스템 디자인 의 구조 와 코드 를 더욱 간단하게 하 는 것 이다. 보 너 스 는 디자인 모델 에서 개념 적 인 병발 을 실현 하려 는 것 이다.이 글 은 자신의 그동안 의 학습 성 과 를 기록 하고 정리 하 기 를 바 라 는 것 이지 만 너무 기대 하지 마 세 요. 현재 얻 은 결론 이 제 목적 을 달성 하지 못 했 기 때문에 보 너 스 는 잠시 희망 도 막연 합 니 다.
지식 네트워크 구조 인지 에 대한 준비
우 리 는 거꾸로 원칙 에 의존 하고 반전 을 통제 하 며 주입 에 의존 하 는 관 계 를 미리 알 아야 한다.반전 을 통제 하 는 것 은 디자인 사상 으로 후진 원칙 에 의존 하고 반전 을 통제 하 는 일반적인 주요 방식 이나 수단 은 주입 에 의존 하 는 것 이다.후진 원칙 에 의존 하면 본 고 는 설명 하지 않 고 우리 가 알 아 보면 된다.
채 팅 의존 주입 과 IoC
의존 주입 은 무엇 일 까요?
여기 서 몇 가지 선행 개념 을 묘사 해 야 한다. 먼저 우 리 는 하나
가 있어 야 한다. 이것
은
에 의 해
되 었 고
은 이런
을 사용 하여 행 위 를 하거나 조작 을 실시 해 야 한다.
은 일부 시스템 디자인 의 실 체 를 말한다. 예 를 들 어 규정 위반 기록 류 가 있어 서 창설, 수정, 심 사 를 실현 하 는 업무 논 리 를 말한다. 그러면 이 규정 위반 기록 류 는 바로 하나
이다. 예 를 들 어 이런 업무 논리 가 있다. 규정 위반 기록 에는 여러 개의 규정 위반 기준 이 포함 되 어 있다.이때 이 규정 위반 지표 류 도 하나
였 다.
이란
다른 특정한
에 의존 하여 특정한 기능 을 실현 해 야 한 다 는 것 을 말한다. 예 를 들 어 방금 예 에서 규정 위반 기록 류 는 규정 위반 기준 류 에 의존 하여 규정 위반 기록 을 만 드 는 논 리 를 실현 해 야 한다. 만 든 논리 에서 이 규정 위반 기록 이 어떤 규정 위반 기준 이 있 는 지, 그리고 규정 위반 기준 을 해 야 하 는 업무 검증 을 기록 해 야 한다. 여기 서 규정 위반 기록 류
규정 위반 지표 류
에 의존 하여 일부 동작 을 실현 해 야 한다. 그러면 규정 위반 지표 류
는 규정 위반 기록 류
의
이다.
에 대해 서 는
어떻게 얻 는 지
를 말 합 니 다. 흔히 볼 수 있 는 방식 은 구조 함수 매개 변 수 를 통 해 들 어 오고 클래스 방법 매개 변 수 를 통 해 들 어 오 는 것 입 니 다. 쉽게 말 하면 다음 과 같 습 니 다. = new B();
= new A( );
. ();
IoC 용기
IoC 란 무엇 인가
무엇이 Inversion Of Control (반전 제어) 입 니까? 여기 서 우 리 는 먼저 통제 의 정전 을 이해 해 야 합 니 다. 다른 주체 나 절차 에 대한 통 제 는 주체 이내 에 완전히 제 한 된 것 이 바로 통제 의 정전 입 니 다. 사실은 우리 가 평소에 코드 를 쓰 는 자세 입 니 다. 예 를 들 어 다음 과 같 습 니 다.
class A
{
public function () { B = new B(); B. (); C = new C(); C. (); return " !"; } } A = new A(); A. ();
반전 을 통제 하 는 것 은 다른 주체 에 대한 통 제 는 주체 안에 있 지 않 고 주체 가 직접 대상 을 만 들 필요 가 없 으 며 주입 하 는 방식 으로 대상 을 얻 는 것 을 말한다. 그래, 위 에서 주입 에 의존 하 는 예 는 반전 을 통제 하 는 것 이다. 보통 주입 에 의존 하여 반전 을 통제 하 는 것 이다. 예 를 들 어 다음 과 같다.
class A
{
B B;
C C;
public __construct(B B, C C) { this. B = B; this. C = C; } public function () { this. B. (); this. C. (); return " !"; } } // B = new B(); C = new C(); A = new A( B, C); A. ();
왜 IoC 용기 가 있어 야 하 는 지, 어떤 효 과 를 실현 해 야 하 는 지
네!IoC 의 개념 을 소개 하고 나 면 무엇이 IoC 용기 일 까요? 사실은 대상 을 만 드 는 작업 을 '용기' 에 받 으 면 코드 가 더욱 간단 하고 간결 해 집 니 다. 위의 예 를 바탕 으로 실현 하고 자 하 는 효 과 는 쉽게 말 하면:
// A
= new ();
. (B);
. (C);
. (A);
A = . (A);
A. ();
laravel IoC 용기 상세 설명
IoC 용 기 를 사용 하여 의존 을 주입 하면 우 리 는 더욱 편리 하 게 관리 하고 사용 할 수 있 습 니 다. 여기 서 IoC 용기 의 구체 적 인 실현 을 연구 할 필요 가 있 습 니 다. 우 리 는 업계 에서 유명한 실현 을 찾 을 수 있 습 니 다. laravel 의 IoC 용 기 를 찾 아 그 속 의 결말 을 알 아 볼 수 있 습 니 다. IoC 용기 의 기본 동작 은 두 가지 가 있 습 니 다. 바 인 딩 과 생산 대상 입 니 다. 우 리 는 이 두 용기 의 기본 적 인 조작 을 바탕 으로 들 어 갈 수 있IoC 용기 내부 로 들어가다.
IoC 용기 의 기본 조작
기본 사용 방법
laravel IoC 용기 의 사용 방법 은 기본적으로 상기 용기 의 사용 예 와 일치 합 니 다. 하 나 는 주 체 를 연결 하 는 것 입 니 다. 이곳 의 주 체 는 특정한 유형 이나 특정한 대상 을 말 합 니 다. 다른 하 나 는 해당 대상 을 만들어 야 각종 업무 논리 나 자 기능 을 완성 할 수 있 습 니 다.
귀속
laravel 의 용 기 는 여러 개의 바 인 딩 관 계 를 유지 하고 생산 대상 에서 해당 하 는 종 류 를 분석 해 야 이런 대상 을 만 들 수 있 습 니 다. 바 인 딩 관 계 는 다음 과 같은 몇 가지 가 있 습 니 다. 관심 이 있 는 독 자 는 container 류 의 속성 을 조회 할 수 있 습 니 다. 여 기 는 바 인 딩 관계 와 호출 관 계 를 간단하게 소개 하여 참고 할 수 있 습 니 다.
resolved[]:
1. Container.resolved
2. Container.resolve
3. Container.flush
4. Container.offsetUnset
bindings[]:
1. Container.bind
2. Container.isShare
3. Container.getConcrete
4. Container.flush
5. Container.offsetUnset
6. Container.Bound
7. Container.getBindings
instances[]:
1. Application.make // , provider
2. Container.bound
3. Container.resolved
4. Container.isShared
5. Container.extend
6. Container.instance
7. Container.resolve
8. Container.dropStaleInstances
9. Container.forgetInstance
10. Container.forgetInstances
11. Container.flush
12. Container.offsetUnset
aliases[]:
1. Container.isAlias
2. Container.instance
3. Container.removeAbstractAlias
4. Container.alias
5. Container.getAlias
6. Container.dropStaleInstances
7. Container.flush
abstractAliases[]: alias
methodBindings[]:
extenders[]:
tags[]: abstracts tag
......
다음은 bings, intances, aliases 를 상세 하 게 소개 합 니 다.
$this->app->bind('App\Services\RedisEventPusher', null);
$this->app->bind('HelpSpot\API', function ($app) { return new HelpSpot\API(); });//
$this->app->bind(
'App\Contracts\EventPusher', // Interface
'App\Services\RedisEventPusher' // );
$api = new HelpSpot\API(new HttpClient);
$this->app->instance('HelpSpot\Api', $api);
foreach ([
'db' => [\Illuminate\Database\DatabaseManager::class],
'db.connection' => [\Illuminate\Database\Connection::class, \Illuminate\Database\ConnectionInterface::class],
'events' => [\Illuminate\Events\Dispatcher::class, \Illuminate\Contracts\Events\Dispatcher::class],
......
] as $key => $aliases) { foreach ($aliases as $alias) { $this->alias($key, $alias); } }
그럼 $this - > alias 의 실현 은? alias 방법의 실현 은 매우 간단 합 니 다. 별명 에 대한 해석 은 다음 과 같은 IoC 실행 과정 에서 설명 되 지 않 습 니 다. 주로 alias 와 abstractAliases 두 개의 별명 관 계 를 유지 하 는 것 입 니 다. 각각 두 개의 phop 배열 이 고 소스 코드 를 붙 이면 여러분 이 알 수 있 습 니 다 >. public function alias($abstract, $alias) { ... $this->aliases[$alias] = $abstract; $this->abstractAliases[$abstract][] = $alias; }
make 를 사용 하여 대상 을 만 드 는 것 입 니 다.
public function make($abstract, array $parameters = []) { // resolve return $this->resolve($abstract, $parameters); }
IoC 용기 의 실행 절차
laravel 용 기 를 사용 하면 용기 대응 방법 으로 클래스 / 대상 을 연결 하고 우리 가 필요 로 하 는 대상 을 만 드 는 방법 을 설명 합 니 다. 다음은 bid 동작 과 make 동작의 구체 적 인 실현 과정 을 살 펴 보 겠 습 니 다.
bind 동작 과정
public function bind($abstract, $concrete = null, $shared = false) { $this->dropStaleInstances($abstract); if (is_null($concrete)) { $concrete = $abstract; } if (! $concrete instanceof Closure) { $concrete = $this->getClosure($abstract, $concrete); } $this->bindings[$abstract] = compact('concrete', 'shared'); if ($this->resolved($abstract)) { $this->rebound($abstract); } }
make 동작 과정 (resolve)
인 스 턴 스 동작 과정
다음으로 전송:https://www.cnblogs.com/varXinYuan/p/11546415.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.