Heim Backend-Entwicklung PHP-Tutorial Lassen Sie uns über Abhängigkeitsinjektion, Container und Erscheinungsmuster in der Framework-Entwicklung sprechen (Teil 2)

Lassen Sie uns über Abhängigkeitsinjektion, Container und Erscheinungsmuster in der Framework-Entwicklung sprechen (Teil 2)

Jul 14, 2018 pm 01:47 PM
依赖注入 容器

Dieser Artikel stellt hauptsächlich die Abhängigkeitsinjektion, den Container und den Erscheinungsmodus (unterer Teil) der Chat-Framework-Entwicklung vor. Jetzt kann ich ihn mit Ihnen teilen

Darstellungsmodus: Fassade, auch Fassadenmodus genannt

1 In einem Satz: Es dient dazu, Operationen zu kapseln und eine einheitliche Schnittstelle nach außen bereitzustellen

2 Klassen und der Container, den ich gerade gelernt habe, können verschiedene Klassen und Implementierungen kapseln

3 Daher sind der Erscheinungsmodus und der abhängige Container goldene Partner und werden unten oft zusammen

<?php 
/**
 * 用户登录的操作涉及三个操作
 * 1.连接数据库
 * 2.用户数据验证
 * 3.输出提示信息
 */
require &#39;container.php&#39;;
//创建Facade类,实现以上三个功能
class Facade
{
//连接数据库
public static function connect(Container $container)
{
return $container->make(&#39;db&#39;)->connect();
}
//用户数据验证
public static function check(Container $container)
{
return $container->make(&#39;validate&#39;)->check();
}
//输出提示信息
public static function display(Container $container)
{
return $container->make(&#39;view&#39;)->display();
}
}
//客户端调用
echo Facade::connect($container);
echo Facade::check($container);
echo Facade::display($container);
//可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用
require &#39;container.php&#39;;
class Facade
{
//创建成员属性保存容器对象
protected static $container = null;
//创建初始化方法为容器对象赋值
public static function initialize(Container $container)
{
static::$container = $container;
}
/**
* 因为已经在初始化方法中将容器对象导入到了当前类中,
* 并且保存到了类的静态属性中,为所有类成员所共享,
* 所以以下方法可直接调用不用再容器注入
* 注意:这里全部采用后期静态延迟绑定方法来访问当前容器对象
* 这主要是为了方便用户在静态继承的上下文环境中进行调用
*/
//连接数据库
public static function connect()
{
return static::$container->make(&#39;db&#39;)->connect();
}
//用户数据验证
public static function check()
{
return static::$container->make(&#39;validate&#39;)->check();
}
//输出提示信息
public static function display()
{
return static::$container->make(&#39;view&#39;)->display();
}
}
//客户端调用
//初始化类门面类中的容器对象
Facade::initialize($container);
//静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强)
echo Facade::connect();
echo Facade::check();
echo Facade::display();
Nach dem Login kopieren

verwendet Der Code zusammen:

<?php 
//数据库操作类
class Db
{
//数据库连接
public function connect()
{
return &#39;数据库连接成功<br>&#39;;
}
}
//数据验证类
class Validate
{
//数据验证
public function check()
{
return &#39;数据验证成功<br>&#39;;
}
}
//视图图
class View
{
//内容输出
public function display()
{
return &#39;用户登录成功&#39;;
}
}
/******************************************************************************/
//一.创建容器类
class Container
{
//创建属性,用空数组初始化,该属性用来保存类与类的实例化方法
public $instance = [];
//初始化实例数组,将需要实例化的类,与实例化的方法进行绑定
public function bind($abstract, Closure $process)
{
//键名为类名,值为实例化的方法
$this->instance[$abstract] = $process;
}
//创建类实例
public function make($abstract, $params=[])
{
return call_user_func_array($this->instance[$abstract],[]);
}
}
/******************************************************************************/
//二、服务绑定: 将类实例注册到容器中
$container = new Container(); 
//将Db类绑定到容器中
$container->bind(&#39;db&#39;, function(){
return new Db();
});
//将Validate类实例绑定到容器中
$container->bind(&#39;validate&#39;, function(){
return new Validate();
});
//将View类实例绑定到容器中
$container->bind(&#39;view&#39;, function(){
return new View();
});
Nach dem Login kopieren

Ab PHP 5.3 hat PHP viele Vorteile anderer Programmiersprachen übernommen und immer mehr neue Funktionen unterstützt, insbesondere mit der Einführung von PHP 7.0 PHP erreicht eine neue Höhe und ist eine bahnbrechende Version. Weitere hervorragende Tutorials zur PHP-Entwicklung finden Sie weiterhin auf der chinesischen PHP-Website (www.php.cn).

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Lassen Sie uns über Abhängigkeitsinjektion, Container und Erscheinungsmuster in der Framework-Entwicklung sprechen (Teil 1)

Sprechen wir über Abhängigkeitsinjektion, Container und Erscheinungsmuster für die Framework-Entwicklung (Mitte)

Das obige ist der detaillierte Inhalt vonLassen Sie uns über Abhängigkeitsinjektion, Container und Erscheinungsmuster in der Framework-Entwicklung sprechen (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie Docker für die Wiederherstellung nach Containerfehlern und den automatischen Neustart So verwenden Sie Docker für die Wiederherstellung nach Containerfehlern und den automatischen Neustart Nov 07, 2023 pm 04:28 PM

Als leichtgewichtige Virtualisierungsplattform auf Basis der Containertechnologie wird Docker in verschiedenen Szenarien häufig eingesetzt. In einer Produktionsumgebung sind hohe Verfügbarkeit und automatische Fehlerbehebung von Containern von entscheidender Bedeutung. In diesem Artikel wird die Verwendung von Docker für die Wiederherstellung nach Containerfehlern und den automatischen Neustart vorgestellt, einschließlich spezifischer Codebeispiele. 1. Konfiguration des automatischen Container-Neustarts In Docker kann die automatische Neustartfunktion des Containers aktiviert werden, indem beim Ausführen des Containers die Option --restart verwendet wird. Gängige Optionen sind: Nein: Nicht automatisch neu starten. still

AtomHub, das von Huawei, Inspur und anderen Einheiten gemeinsam geschaffene Open-Source-Containerspiegelungszentrum, gab bekannt, dass es offiziell für öffentliche Tests geöffnet ist und inländische Dienste stabil herunterladen kann. AtomHub, das von Huawei, Inspur und anderen Einheiten gemeinsam geschaffene Open-Source-Containerspiegelungszentrum, gab bekannt, dass es offiziell für öffentliche Tests geöffnet ist und inländische Dienste stabil herunterladen kann. Jan 02, 2024 pm 03:54 PM

Aus den offiziellen Nachrichten von Huawei geht hervor, dass die Open Atomic Developer Conference mit dem Thema „Alles für Entwickler“ zwei Tage lang, vom 16. bis 17. Dezember, in Wuxi stattfand. Die Konferenz wurde von der Open Atomic Open Source Foundation, Huawei und geleitet Inspur, DaoCloud, Xieyun, Qingyun, Hurricane Engine sowie die OpenSDV Open Source Alliance, die openEuler-Community, die OpenCloudOS-Community und andere Mitgliedseinheiten, das AtomHub Trusted Mirror Center ist offiziell für öffentliche Tests geöffnet. AtomHub folgt den Konzepten der Co-Konstruktion, Co-Governance und Sharing und zielt darauf ab, Open-Source-Organisationen und Entwicklern ein neutrales, offenes und gemeinsam aufgebautes, vertrauenswürdiges Open-Source-Container-Spiegelzentrum zur Verfügung zu stellen. Angesichts der Instabilität und Unkontrollierbarkeit von Image-Warehouses wie DockerHub und anderen

So installieren Sie Redhat Podman unter Windows 10 oder 11 über CMD So installieren Sie Redhat Podman unter Windows 10 oder 11 über CMD Oct 02, 2023 pm 09:33 PM

Installieren Sie RedHatPodman unter Windows 11 oder 10. Befolgen Sie diese Schritte, um RedHatPodman über die Eingabeaufforderung oder Powershell auf Ihrem Windows-Computer zu installieren: Schritt 1: Überprüfen Sie die Systemanforderungen. Zunächst müssen Sie sicherstellen, dass Ihr Windows-System mit den neuesten Updates ausgeführt wird, damit dies möglich ist Erfüllen Sie die Anforderungen zum Ausführen von Podman. Sie sollten Windows 11 oder Windows 10 Version 1709 (Build 16299) oder höher verwenden und Sie müssen das Windows-Subsystem für Linux 2 (WSL2) und VM-Funktionen aktivieren. Wenn diese noch nicht aktiviert sind, können Sie den zweistufigen Befehl verwenden führt dies aus

Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular Dec 02, 2022 pm 09:14 PM

Dieser Artikel führt Sie durch die Abhängigkeitsinjektion, stellt die durch die Abhängigkeitsinjektion gelösten Probleme und ihre native Schreibmethode vor und spricht über das Abhängigkeitsinjektions-Framework von Angular. Ich hoffe, es wird Ihnen hilfreich sein!

So verwenden Sie die Abhängigkeitsinjektion (Dependency Injection) im Phalcon-Framework So verwenden Sie die Abhängigkeitsinjektion (Dependency Injection) im Phalcon-Framework Jul 30, 2023 pm 09:03 PM

Einführung in die Methode zur Verwendung der Abhängigkeitsinjektion (DependencyInjection) im Phalcon-Framework: In der modernen Softwareentwicklung ist die Abhängigkeitsinjektion (DependencyInjection) ein gängiges Entwurfsmuster, das darauf abzielt, die Wartbarkeit und Testbarkeit des Codes zu verbessern. Als schnelles und kostengünstiges PHP-Framework unterstützt das Phalcon-Framework auch die Verwendung von Abhängigkeitsinjektion zur Verwaltung und Organisation von Anwendungsabhängigkeiten. In diesem Artikel erfahren Sie, wie Sie das Phalcon-Framework verwenden

Wie sortiere ich C++-STL-Container? Wie sortiere ich C++-STL-Container? Jun 02, 2024 pm 08:22 PM

So sortieren Sie STL-Container in C++: Verwenden Sie die Funktion sort(), um Container an Ort und Stelle zu sortieren, z. B. std::vector. Mithilfe der geordneten Container std::set und std::map werden Elemente beim Einfügen automatisch sortiert. Für eine benutzerdefinierte Sortierreihenfolge können Sie eine benutzerdefinierte Komparatorklasse verwenden, um beispielsweise einen Vektor von Zeichenfolgen alphabetisch zu sortieren.

Abhängigkeitsinjektionsmuster bei der Übergabe von Golang-Funktionsparametern Abhängigkeitsinjektionsmuster bei der Übergabe von Golang-Funktionsparametern Apr 14, 2024 am 10:15 AM

In Go wird der Abhängigkeitsinjektionsmodus (DI) durch die Übergabe von Funktionsparametern implementiert, einschließlich der Übergabe von Werten und Zeigern. Im DI-Muster werden Abhängigkeiten typischerweise als Zeiger übergeben, um die Entkopplung zu verbessern, Sperrenkonflikte zu reduzieren und die Testbarkeit zu unterstützen. Durch die Verwendung von Zeigern wird die Funktion von der konkreten Implementierung entkoppelt, da sie nur vom Schnittstellentyp abhängt. Durch die Zeigerübergabe wird auch der Overhead für die Übergabe großer Objekte reduziert, wodurch Sperrenkonflikte reduziert werden. Darüber hinaus erleichtert das DI-Muster das Schreiben von Komponententests für Funktionen mithilfe des DI-Musters, da Abhängigkeiten leicht simuliert werden können.

Was sind die häufigsten Typen in C++-STL-Containern? Was sind die häufigsten Typen in C++-STL-Containern? Jun 02, 2024 pm 02:11 PM

Die häufigsten Containertypen in C++STL sind Vector, List, Deque, Set, Map, Stack und Queue. Diese Container bieten Lösungen für unterschiedliche Datenspeicheranforderungen, z. B. dynamische Arrays, doppelt verknüpfte Listen sowie schlüssel- und wertbasierte assoziative Container. In der Praxis können wir STL-Container verwenden, um Daten effizient zu organisieren und darauf zuzugreifen, beispielsweise um Schülernoten zu speichern.

See all articles