ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装します

ThinkPHP コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装します

咔咔
咔咔オリジナル
2020-10-10 11:34:181587ブラウズ

この記事では、2 つの設計パターンとリフレクションの知識を使用して単純なケースを実装し、以前に学習した知識ポイントを単純に統合して接続します。

5. デザイン パターンとリフレクションを統合してケースを実装する

99 と 80 の経験-1年 いよいよ難題はコンテナです このリンクでは、まず独自のコンテナを実装し、以前説明したシングルトンモード、登録ツリーモード、リフレクションをシリーズで繋いで、より印象を深め、理解を深めていきます。 。

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 コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装しますこのコードは、シングルトン モードと登録ツリー モードの組み合わせを使用して変更されました。

変更後、結果が出力され、car 値 123 からも返されます。 。

set メソッドと get メソッドは同じメソッド内に共存しないことに注意してください。これらはデモンストレーションを行うために一緒に書かれています。

set メソッドと get メソッドの使用方法は、後でコンテナのソース コードを見るとわかりますが、ここではシングルトン モードと登録ツリー モードを体験するだけに留めておきます。

ThinkPHP コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装しますここに小さな変更を加え、上記のコードの最後の 2 行を変更します

ThinkPHP コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装します
ここに画像の説明を挿入
ThinkPHP コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装します
ここに画像の説明を挿入

学習を続けて継続してブログを書くそして共有することを主張することは、Kaka が設立当初から常に堅持してきた信念です。巨大なインターネット上の Kaka の記事が少しでもお役に立てれば幸いです。カカです、また会いましょう。

以上がThinkPHP コンテナーはデザインパターンとリフレクションを使用して単純なケースを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。