PHP Master | Abhängigkeitsinjektion mit Pickel
Kernpunkte
- Abhängigkeitsinjektion ist ein Schlüsselkonzept für die Anwendungsentwicklung. Durch die Injektion von Abhängigkeiten in Module, anstatt sie zu harten, können Sie effizientere Code schreiben.
- Pimple ist ein einfacher Abhängigkeitsinjektionsbehälter, der die Abschluss von PHP verwendet, um Abhängigkeiten auf überschaubare Weise zu definieren und dazu beitragen, Ihren Code aufrechtzuerhalten.
- Die beiden Haupttechniken für die Injektion von Abhängigkeiten sind Konstruktor-basierte Abhängigkeitsinjektion und setterbasierte Injektion mit jeweils eigenen Vor- und Nachteilen.
- Pimple unterstützt das Trockenprinzip der Softwareentwicklung, indem es als Container fungiert, der Abhängigkeiten definiert, wodurch die Duplikation vermieden wird und die Verwaltung und Zentralisierung von Diensten in Anwendungen erleichtert.
- Pimple bietet auch erweiterte Funktionen, wie die Möglichkeit, dieselbe Instanz mithilfe gemeinsamer Objekte zurückzugeben, und die Fähigkeit, vorhandene Verschlüsse dynamisch zu ändern, ohne die ursprüngliche Implementierung zu beeinflussen.
In der Anwendungsentwicklung versuchen wir, eigenständige Module zu erstellen, um Code in zukünftigen Projekten wiederzuverwenden. Das Erstellen von völlig unabhängigen Modulen, die nützliche Funktionen liefern, ist jedoch schwierig. Hier ist die Abhängigkeitsinjektion nützlich, da wir die Abhängigkeiten, die benötigt werden, damit der Code benötigt wird, ohne festen Code in das Modul zu funktionieren. Pimple ist ein einfacher Abhängigkeitsinjektionsbehälter, in dem PHP -Verschluss verwendet wird, um Abhängigkeiten auf überschaubare Weise zu definieren. In diesem Artikel werden wir das Problem hart codierter Abhängigkeiten, die Lösung von Abhängigkeitsinjektionen untersuchen und wie man Pimple verwendet, um die Aufrechterhaltung der Code-Nebel-Abhängigkeitsinjektion zu erleichtern.
Spezifische Abhängigkeiten Ausgabe
Beim Schreiben von Anwendungen verwenden wir viele PHP -Klassen. Eine Klasse muss möglicherweise Methoden eines oder mehrerer anderer Klassen aufrufen, um die erwartete Funktionalität zu liefern. Wir sagen, dass die erste Klasse von anderen Klassen abhängt. Zum Beispiel:
<?php class A { public function a1() { $b = new B(); $b->b1(); } }
Klasse A hängt von Klasse B. ab. Wenn die Klasse B nicht verfügbar ist, funktioniert der obige Code nicht. Darüber hinaus haben wir jedes Mal, wenn wir die Erstellung eines Objekts in der Klasse härten, spezifische Abhängigkeiten von der Klasse. Spezifische Abhängigkeiten sind ein Hindernis für das Schreiben von Testable Code. Ein besserer Ansatz ist es, ein Objekt der Klasse B der Klasse B zu liefern. A. Diese Objekte können mit der Konstruktor- oder Settermethode von A bereitgestellt werden. Bevor wir weiter diskutieren, schauen wir uns ein realistischeres Szenario an.
Inhalt auf sozialen Netzwerk -Websites teilen, ist heutzutage sehr häufig, und die meisten Websites zeigen ihre sozialen Profil -Feeds auf ihren Websites direkt an. Angenommen, wir haben eine Klasse namens SocialFeeds, die Feeds von sozialen Websites wie Twitter, Facebook, Google usw. generiert. Erstellen Sie separate Klassen, um jede dieser Dienste zu verarbeiten. Hier werden wir uns den Klassen -Twitterservice ansehen, der mit Twitter interagiert. Die SocialFeeds -Klasse verwendet TwitterService, um Twitter -Feeds anzufordern. TwitterService interagiert mit der Datenbank, um bestimmte Benutzer -Token abzurufen, die auf die API zugreifen. Das Token wird an die OAuth -Klasse übergeben, die das Feed mit dem bereitgestellten Token abholt und an die SocialFeeds -Klasse zurückgibt.
<?php class A { public function a1() { $b = new B(); $b->b1(); } }
<?php class SocialFeeds { public function getSocialFeeds() { $twService = new TwitterService(); echo $twService->getTweets(); } }
<?php class TwitterService { public function getTweets() { $db = new DB(); $query = "Query to get user token from database"; $token = $db->getQueryResults($query); $oauth = new OAuth(); return $oauth->requestTwitterFeed($token); } }
<?php class OAuth { public function requestTwitterFeed($token) { // Retrieve and return twitter feed using the token } }
Es ist offensichtlich, dass SocialFeeds auf Twitterservice angewiesen sind. Aber TwitterService hängt von DB und OAuth ab, sodass SocialFeeds indirekt von DB und OAuth abhängen. Was ist das Problem? SocialFeeds beruhen auf der konkreten Implementierung von drei Klassen. Daher ist es unmöglich, SocialFeeds ohne die tatsächliche Umsetzung anderer Klassen getrennt zu testen. Oder nehmen wir an, wir möchten eine andere Datenbank oder einen anderen OAuth -Anbieter verwenden. In diesem Fall müssen wir die vorhandene Klasse durch die neue Klasse im gesamten Code ersetzen.
Fix spezifische Abhängigkeiten
Die Lösung für diese Abhängigkeiten ist einfach, d. H. Dynamisch Objekte bereitzustellen, wenn dies erforderlich ist, ohne konkrete Implementierungen zu verwenden. Es gibt zwei Arten von Techniken, die Abhängigkeiten injizieren können: Konstruktor-basierte Abhängigkeitsinjektion und setterbasierte Injektion.
Konstruktorbasierte Injektion
Mit Konstruktor-basierter Abhängigkeitsinjektion wird das Abhängigkeitsobjekt extern erstellt und als Parameter an den Konstruktor der Klasse übergeben. Wir können diese Objekte Klassenvariablen zuweisen und sie überall innerhalb der Klasse verwenden. Die Konstruktor-basierte Injektion der SocialFeeds-Klasse lautet wie folgt:
<?php class DB { public function getQueryResults($query) { // Get results from database and return token } }
Eine Instanz von Twitterservice wird als Objekt an den Konstruktor übergeben. SocialFeeds stützen sich immer noch auf Twitterservice, aber jetzt können wir verschiedene Versionen von Twitter -Dienstanbietern und sogar Scheinobjekten für Testzwecke bereitstellen. In Bezug auf TwitterService werden auch DB- und OAuth -Klassen auf ähnliche Weise definiert.
<?php class SocialFeeds { public $twService; public function __construct($twService) { $this->twService = $twService; } public function getSocialFeeds() { echo $this->twService->getTweets(); } }
setzwerkbasierte Injektion
Verwenden von Setter-basierten Injektionen werden Objekte mit Setter-Methoden anstelle von Konstruktoren bereitgestellt. Das Folgende ist die setzerbasierte Abhängigkeitsinjektionsinjektion der SocialFeeds-Klasse:
<?php $db = new DB(); $oauth = new OAuth(); $twService = new TwitterService($db, $oauth); $socialFeeds = new SocialFeeds($twService); $socialFeeds->getSocialFeeds();
Der Initialisierungscode enthält jetzt DB und OAuth wie folgt:
<?php class SocialFeeds { public $twService; public function getSocialFeeds() { echo $this->twService->getTweets(); } public function setTwitterService($twService) { $this->twService = $twService; } }
Konstruktor und Setterinjektion
Konstruktor-basierte Injektion oder Setter-basierte Injektion liegt bei Ihnen. Konstruktorbasiertes Injektion ist geeignet, wenn alle Abhängigkeiten eine Klasse instanziieren müssen. Setterbasierte Injektion ist geeignet, wenn nicht jedes Mal Abhängigkeiten erforderlich sind.
pros
- Konstruktor - Schauen Sie sich nur den Konstruktor der Klasse an, um alle Abhängigkeiten der Klasse zu identifizieren
- setor - Das Hinzufügen neuer Abhängigkeiten ist so einfach wie das Hinzufügen einer neuen Setter -Methode und baut den vorhandenen Code nicht auf
Nachteile
- Konstruktor - Hinzufügen neuer Abhängigkeiten wird dem Konstruktor Parameter hinzufügen. setor - Wir müssen manuell nach notwendigen Abhängigkeiten suchen, da sie nirgendwo angegeben sind
Pimple's Rolle in di
Wenn wir bereits Abhängigkeiten mit den oben genannten Techniken injizieren können, fragen Sie sich möglicherweise, warum Sie Pickel benötigen. Um diese Frage zu beantworten, müssen wir uns das trockene Prinzip ansehen.
Wiederholen Sie sich nicht (trocken) ist ein Prinzip in der Softwareentwicklung, das darauf abzielt, die Duplikation verschiedener Informationen zu verringern, was besonders bei mehrschichtigen Architekturen nützlich ist. Die Aussage des Trockenprinzips lautet: "Jedes Wissenfragment muss eine einzige, klare, maßgebliche Darstellung in einem System haben" - WikipediaBetrachten Sie das Konstruktor-basierte Injektionsbeispiel. Jedes Mal, wenn wir ein Objekt der SocialFeed -Klasse wollen, müssen wir den gesamten Setup -Prozess der Instanziierung und Übergabe seiner Abhängigkeiten wiederholen. Laut Trocken sollten ein solcher Code vermieden werden, um Wartungsprobleme zu vermeiden. Pimple fungiert als Container, der solche Abhängigkeiten definiert, um eine Duplikation zu vermeiden. Schauen wir uns ein einfaches Beispiel an, um zu sehen, wie Pickel funktioniert.
<?php class A { public function a1() { $b = new B(); $b->b1(); } }
<?php class SocialFeeds { public function getSocialFeeds() { $twService = new TwitterService(); echo $twService->getTweets(); } }
Erweiterte Pickel Verwendung
In dem obigen Szenario gibt Pimple jedes Mal, wenn sie angefordert wird, eine neue Instanz jeder Klasse aus der Schließung zurück. In einigen Fällen müssen wir dasselbe Objekt jedes Mal eine neue Instanz verwenden, z. B. eine Verbindung zu einer Datenbank ist ein perfektes Beispiel. Pimple bietet die Möglichkeit, dieselbe Instanz mit einem gemeinsam genutzten Objekt zurückzugeben.
<?php class A { public function a1() { $b = new B(); $b->b1(); } }
<?php class SocialFeeds { public function getSocialFeeds() { $twService = new TwitterService(); echo $twService->getTweets(); } }
Zusammenfassung
Verwalten von Abhängigkeiten ist eine der wichtigsten und schwierigsten Aufgaben bei der Entwicklung von Webanwendungen. Wir können die Abhängigkeitsinjektion von Konstruktoren und Setter -Methoden verwenden, um sie effektiv zu verwalten. Die Abhängigkeitsinjektion selbst hat jedoch auch einige Probleme, und Pimple löst diese Probleme, indem sie einen leichten Behälter bereitstellen, um Objektabhängigkeiten auf trockene Weise zu erstellen und zu speichern. Teilen Sie Ihre Erfahrungen mit der Verwaltung von Abhängigkeiten in Ihrem Projekt und Ihren Gedanken zum Pickel als Abhängigkeitsinjektionsbehälter in den Kommentaren unten mit.
FAQs über die Abhängigkeitsinjektion mit Pickel (FAQ)
Was ist Pickel und warum wird es in PHP verwendet?Pimple ist ein einfacher PHP -Abhängigkeitsinjektionsbehälter, mit dem Sie Dienste in Ihrer Anwendung verwalten und zentralisieren können. Es wird in PHP verwendet, wodurch der Code flexibler, wiederverwendbarer und einfacher zu testen ist. Durch die Verwendung von Pimple können Sie Objekte an einem Ort instanziieren und in verschiedene Teile Ihrer Anwendung injizieren, wodurch die Notwendigkeit des globalen Zustands reduziert und Ihr Code leichter zu warten und zu testen ist.
Wie funktioniert Pickel?
Pimple arbeitet durch Speichern von Servicedefinitionen in Containern. Diese Definitionen sind abrufbar (Funktion oder Methode) und geben Instanzen des Dienstes zurück. Wenn Sie von einem Container aus auf einen Dienst zugreifen, führt Pimple die Dienstdefinition aus, um ein Dienstobjekt zu erstellen. Auf diese Weise können Sie Dienste zentralisiert und Dienste während der gesamten Anwendung teilen.
Wie installiere ich Pickel?
Pickel kann mit Composer (PHP -Abhängigkeitsmanagement -Tool) installiert werden. Sie können Composer weltweit auf Ihrem System installieren und dann Pickle in Ihr Projekt einführen, indem Sie den Befehl
ausführen. composer require pimple/pimple
Wie kann man einen Dienst in Pickel definieren?
In Pimple können Sie einen Dienst definieren, indem Sie einem Schlüssel in einem Container ein Callable -Objekt zuweisen. Das Callable -Objekt sollte eine Instanz des Dienstes zurückgeben. Zum Beispiel können Sie einen Dienst für die Mail -Absenderklasse wie folgt definieren:
$container['mailer'] = function ($c) { return new Mailer($c['smtp']); };
In diesem Beispiel wird der E -Mail -Sender -Dienst als neue Instanz der Mailerklasse definiert, in der der SMTP -Dienst als Abhängigkeit injiziert wird.
Wie kann man in Pickle zugänglich machen?
Sie können mit Array -Notation mit Servicetasten in Pickle in Pickle zugreifen. Sie können beispielsweise auf den E -Mail -Absenderdienst wie folgt zugreifen: $mailer = $container['mailer'];
. Wenn Sie auf einen Dienst zugreifen, führt Pimple die Servicedefinition aus und gibt das Dienstobjekt zurück.
Wie kann ich Dienste in Pickple teilen?
standardmäßig gibt Pimple jedes Mal, wenn er auf den Dienst zugreift, eine neue Instanz des Dienstes zurück. Wenn Sie den Dienst teilen und jedes Mal dieselbe Instanz zurückgeben möchten, können Sie die share()
-Methode verwenden. Sie können beispielsweise den Mail -Absender -Dienst wie folgt freigeben: $container['mailer'] = $container->share(function ($c) { return new Mailer($c['smtp']); });
.
Kann ich den Service in Pickel verlängern?
Ja, Sie können die Methode extend()
verwenden, um Dienste in Pickel zu erweitern. Auf diese Weise können Sie den Dienst nach der Definition ändern. Sie können beispielsweise den E -Mail -Absenderdienst wie diesen erweitern, um zusätzliche Konfiguration hinzuzufügen:
$container['mailer'] = $container->extend('mailer', function ($mailer, $c) { $mailer->setFrom($c['email.from']); return $mailer; });
In diesem Beispiel wird die setFrom()
-Methode auf den E -Mail -Absenderdienst mit dem email.from
-Dienst als Parameter aufgerufen.
Wie schützt ich Parameter in Pickel?
In Pimple können Sie die Methode protect()
verwenden, um Parameter zu schützen (die nicht als Diensteparameter angesehen werden sollten). Auf diese Weise können Sie Werte in einem Container speichern, ohne sie als Servicedefinitionen zu behandeln. Sie können beispielsweise den Konfigurationswert wie folgt schützen: $container['config.value'] = $container->protect(function () { return 'value'; });
.
Wie kann man Pickple in einem Projekt verwenden?
Sie können Pimple in einem Projekt verwenden, indem Sie eine neue Instanz der Pimpecontainer -Klasse erstellen und dort einen Dienst definieren. Sie können dann vom Container auf den Dienst zugreifen, wo Sie ihn in der Anwendung benötigen. Auf diese Weise können Sie Dienste zentralisiert verwalten und in verschiedene Teile Ihrer Anwendung injizieren.
Was sind die Vorteile der Verwendung von Pickel?
Pimple bietet viele Vorteile für die PHP -Entwicklung. Dies macht Ihren Code flexibler, da Sie Dienste auf zentralisierte Weise verwalten können. Dies erleichtert Ihr Code, da Sie die Wiederverwendung erleichtern können, da Sie Dienste während Ihrer Bewerbung freigeben können. Dadurch wird Ihr Code leichter zu testen, da Sie Mockdienste zum Testen einfügen können. Durch die Verwendung von Pickle können Sie die Qualität Ihres Codes verbessern und die Wartung und Prüfung erleichtern.
Das obige ist der detaillierte Inhalt vonPHP Master | Abhängigkeitsinjektion mit Pickel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











In PHP sollten die Funktionen für Passwort_Hash und passwart_verify verwendet werden, um sicheres Passwort -Hashing zu implementieren, und MD5 oder SHA1 sollte nicht verwendet werden. 1) Passwort_hash generiert einen Hash, der Salzwerte enthält, um die Sicherheit zu verbessern. 2) Passwort_Verify prüfen Sie das Passwort und sicherstellen Sie die Sicherheit, indem Sie die Hash -Werte vergleichen. 3) MD5 und SHA1 sind anfällig und fehlen Salzwerte und sind nicht für die Sicherheit der modernen Passwort geeignet.

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.
