Cet article utilisera deux modèles de conception et des connaissances de réflexion pour mettre en œuvre un cas simple, et intégrera et reliera simplement les points de connaissances appris auparavant.
Expérimenté quatre-vingt-dix-neuf et quatre-vingts -one La difficulté est finalement venue de la partie conteneur.Dans cette partie, nous avons d'abord implémenté notre propre conteneur, et connecté le mode singleton, le mode arbre d'enregistrement et la réflexion expliqués précédemment en série, afin d'approfondir notre impression et de mieux comprendre. il.
Je me souviens encore d'avoir mentionné une telle méthode dependency
dans l'injection de dépendances. Cette méthode consiste à effectuer une injection de dépendances pour découpler le code.
Mais cette fois ! Des conteneurs seront utilisés pour résoudre ce problème.
Définissez d'abord les classes requises. Cette classe utilise le mode singleton et le mode arbre d'enregistrement. Les articles précédents ne sont pas très bons, alors assurez-vous de les lire attentivement, sinon il sera difficile de comprendre les articles suivants. .
<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>
Pour faciliter la visualisation future, voici les démonstrations de cas de chaque section Placez-le dans le contrôleur correspondant
Ici transplantez le code d'injection de dépendance précédent et configurez le routage des annotations pour l'accès pour voir si le résultat final est 123 renvoyé par la méthode Car
Testez l'impression résultat, tout va bien
Ce code a été modifié en utilisant le mode singleton et le mode arbre d'enregistrement
Après modification, le résultat est imprimé, qui est également renvoyé par la voiture Valeur 123.
Il convient de noter ici que les méthodes set et get ne coexisteront pas dans la même méthode. Elles sont écrites ensemble juste pour vous faire une démonstration.
Lorsque vous examinerez le code source du conteneur plus tard, vous saurez comment utiliser les méthodes set et get. Ici, nous vous laissons simplement expérimenter le mode singleton et le mode arbre d'enregistrement.
Faites une petite modification ici, modifiez les deux dernières lignes de code ci-dessus
Continuer à apprendre et persister Écrire des blogs et insister sur le partage sont les convictions auxquelles Kaka a toujours adhéré depuis ses débuts. J'espère que les articles de Kaka sur le grand Internet pourront vous apporter un peu d'aide. Je m'appelle Kaka, à la prochaine fois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!