Heim > PHP-Framework > Denken Sie an PHP > Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren

咔咔
Freigeben: 2020-10-10 11:47:21
Original
1646 Leute haben es durchsucht

In diesem Artikel werden zwei Entwurfsmuster und Reflexionswissen verwendet, um einen einfachen Fall zu implementieren und die zuvor erlernten Wissenspunkte einfach zu integrieren und zu verbinden.

5. Integrieren Sie Designmuster und Reflexion, um einen Fall umzusetzen

Nach neunhunderteinundneunzig Schwierigkeiten kamen wir schließlich zum Containerteil. In diesem Teil implementieren wir zunächst einen unserer Container Verbinden Sie den zuvor erläuterten Singleton-Modus, den Registrierungsbaummodus und die Reflexion in Reihe, um einen tieferen Eindruck und ein besseres Verständnis zu gewinnen.

Ich erinnere mich noch daran, dass ich eine solche Methode bereits in der Abhängigkeitsinjektion erwähnt habedependency Diese Methode besteht darin, eine Abhängigkeitsinjektion durchzuführen, um den Code zu entkoppeln.

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementierenAber dieses Mal! Zur Lösung dieses Problems werden Container eingesetzt.

Definieren Sie zunächst die erforderlichen Klassen. Diese Klasse verwendet den Singleton-Modus und den Registrierungsbaummodus. Die vorherigen Artikel wurden nicht gut gelesen. Lesen Sie sie daher sorgfältig durch, da es sonst schwierig wird, den folgenden Artikel zu verstehen.

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren
Hier Bildbeschreibung einfügen

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementierenDer ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren

<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>
Nach dem Login kopieren

Zur Vereinfachung der zukünftigen Anzeige finden Sie hier die Falldemonstrationen für jeden Abschnitt im entsprechenden Controller.

Der vorherige Abhängigkeitsinjektionscode wird hierher übertragen. Und konfigurieren Sie die Annotationsroute für den Zugriff, um zu sehen, ob das Endergebnis 123 ist, das von der Car-Methode zurückgegeben wird.

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementierenTesten Sie das Druckergebnis, alles ist in Ordnung.

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementierenDieser Code wurde mithilfe der Kombination aus Singleton-Modus und Registrierungsbaummodus geändert Ergebnis, das auch der vom Auto zurückgegebene Wert 123 ist.

Hier ist zu beachten, dass die Set- und Get-Methoden nicht in derselben Methode koexistieren. Sie sind nur zu Demonstrationszwecken zusammen geschrieben.

Wie die Set- und Get-Methoden verwendet werden, erfahren Sie später, wenn Sie sich den Container-Quellcode ansehen. Hier lassen wir Sie nur den Singleton-Modus und den Registrierungsbaum-Modus erleben.

Nehmen Sie hier eine kleine Änderung vor, ändern Sie die letzten beiden Codezeilen oben

Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren
Hier Bildbeschreibung einfügen
Der ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren
Hier Bildbeschreibung einfügen

Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, die Kaka seit seiner Karriere immer vertreten hat. Ich hoffe, dass Kakas Artikel im riesigen Internet Ihnen ein wenig helfen können. Ich bin Kaka, bis zum nächsten Mal.

Das obige ist der detaillierte Inhalt vonDer ThinkPHP-Container verwendet Entwurfsmuster und Reflexion, um einen einfachen Fall zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage