>  기사  >  PHP 프레임워크  >  ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.

咔咔
咔咔원래의
2020-10-10 11:34:181527검색

이 글에서는 두 가지 디자인 패턴과 반영 지식을 활용하여 간단한 사례를 구현하고, 앞서 배운 지식 포인트를 간단히 통합하고 연결해 보겠습니다.

5. 디자인 패턴과 리플렉션을 통합하여 케이스 구현

991개의 어려움 끝에 마침내 컨테이너 부분에 이르렀습니다. 이 부분에서는 먼저 우리의 컨테이너를 구현합니다. 앞서 설명한 싱글턴 모드, 등록 트리 모드, 리플렉션을 직렬로 연결하면 더 깊은 인상과 이해를 얻을 수 있습니다.

이전에 의존성 주입에서 이런 방법을 언급했던 기억이 납니다dependency 이 방법은 코드를 분리하기 위해 종속성 주입을 수행하는 것입니다.

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.그런데 이번엔! 이 문제를 해결하기 위해 컨테이너가 사용됩니다.

먼저 필수 클래스를 정의하세요. 이 클래스는 싱글톤 모드와 등록 트리 모드를 사용합니다. 이전 글에서는 잘 읽히지 않았으니 꼭 읽어보세요. 그렇지 않으면 다음 글을 이해하기 어려울 것입니다.

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.
여기에 그림 설명 삽입

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.

<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #282c34; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #abb2bf; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; padding-top: 15px; background: #282c34; border-radius: 5px;"><span class="hljs-meta" style="color: #61aeee; line-height: 26px;"><?php</span><br/><span class="hljs-comment" style="color: #5c6370; font-style: italic; line-height: 26px;">/**<br/> * Created by PhpStorm.<br/> * User: 咔咔<br/> * Date: 2020/9/21<br/> * Time: 19:04<br/> */</span><br/><br/><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">namespace</span> <span class="hljs-title" style="color: #61aeee; line-height: 26px;">container</span>;<br/><br/><br/><span class="hljs-class" style="line-height: 26px;"><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">class</span> <span class="hljs-title" style="color: #e6c07b; line-height: 26px;">Container</span><br/></span>{<br/>    <span class="hljs-comment" style="color: #5c6370; font-style: italic; line-height: 26px;">/**<br/>     * 存放容器<br/>     * <span class="hljs-doctag" style="color: #c678dd; line-height: 26px;">@var</span> array<br/>     */</span><br/>    <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">public</span> $instances = [];<br/><br/>    <span class="hljs-comment" style="color: #5c6370; font-style: italic; line-height: 26px;">/**<br/>     * 容器的对象实例<br/>     * <span class="hljs-doctag" style="color: #c678dd; line-height: 26px;">@var</span> array<br/>     */</span><br/>    <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">protected</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">static</span> $instance;<br/><br/>    <span class="hljs-comment" style="color: #5c6370; font-style: italic; line-height: 26px;">/**<br/>     * 定义一个私有的构造函数防止外部类实例化<br/>     * Container constructor.<br/>     */</span><br/>    <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">private</span> <span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">function</span> <span class="hljs-title" style="color: #61aeee; line-height: 26px;">__construct</span><span class="hljs-params" style="line-height: 26px;">()</span> </span>{<br/><br/>    }<br/><br/>    <span class="hljs-comment" style="color: #5c6370; font-style: italic; line-height: 26px;">/**<br/>     * 获取当前容器的实例(单例模式)<br/>     * <span class="hljs-doctag" style="color: #c678dd; line-height: 26px;">@return</span> array|Container<br/>     */</span><br/>    <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">public</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">static</span> <span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">function</span> <span class="hljs-title" style="color: #61aeee; line-height: 26px;">getInstance</span> <span class="hljs-params" style="line-height: 26px;">()</span><br/>    </span>{<br/>        <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">if</span>(is_null(<span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">self</span>::$instance)){<br/>            <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">self</span>::$instance = <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">new</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">self</span>();<br/>        }<br/><br/>        <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">return</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">self</span>::$instance;<br/>    }<br/><br/>    <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">public</span> <span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">function</span> <span class="hljs-title" style="color: #61aeee; line-height: 26px;">set</span> <span class="hljs-params" style="line-height: 26px;">($key,$value)</span><br/>    </span>{<br/>        <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">return</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">$this</span>->instances[$key] = $value;<br/>    }<br/><br/>    <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">public</span> <span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">function</span> <span class="hljs-title" style="color: #61aeee; line-height: 26px;">get</span> <span class="hljs-params" style="line-height: 26px;">($key)</span><br/>    </span>{<br/>        <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">return</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">$this</span>->instances[$key];<br/>    }<br/>}<br/></code>

향후 보기의 편의를 위해 해당 컨트롤러의 각 섹션에 대한 사례 데모를 제공합니다.

여기에는 이전 종속성 주입 코드를 이식하고 주석 경로를 구성합니다. 최종 결과가 Car 메서드에서 반환된 123인지 확인하려면

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.인쇄 결과를 테스트해 보세요. 모든 것이 정상입니다

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.이 코드는 싱글톤 모드와 등록 트리 모드의 조합을 사용하여 수정되었습니다

수정 후 인쇄해 보세요. 결과는 자동차가 반환한 값 123이기도 합니다.

여기서 set 및 get 메소드는 동일한 메소드로 공존할 수 없다는 점에 유의해야 합니다. 이 메소드는 단지 시연을 제공하기 위해 함께 작성되었습니다.

나중에 컨테이너 소스 코드를 보면 set 및 get 메소드가 어떻게 사용되는지 알 수 있습니다. 여기서는 싱글톤 모드와 등록 트리 모드를 경험해 보겠습니다.

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.여기서 약간 수정하고 위 코드의 마지막 두 줄을 수정하세요

ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.
여기에 사진 설명 삽입
ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.
여기에 사진 설명 삽입

배움에 대한 끈기, 블로그에 대한 끈기, 공유에 대한 끈기는 카카가 처음부터 항상 지켜온 신념입니다. 거대 인터넷에 올라온 카카의 글이 조금이나마 도움이 되었으면 좋겠습니다. 저는 카카입니다. 다음에 만나요.

위 내용은 ThinkPHP 컨테이너는 디자인 패턴과 리플렉션을 사용하여 간단한 케이스를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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