Dieser Artikel führt Sie hauptsächlich in ein tiefgreifendes Verständnis der Kernarchitektur von Laravel 5.5 ein. Der Artikel stellt sie anhand von Bildern, Texten und Beispielcodes ausführlich vor Editor.
1. Die Abhängigkeitsinjektionsmethode
übergibt den Komponentennamen und das Framework wird automatisch instanziiert.
kann beispielsweise direkt verwendet werden , das am häufigsten verwendete Anforderungsobjekt
2. Der Kern von Laravel ist tatsächlich ein IoC-Container Sehr leichtgewichtig, und es gibt nichts Magisches oder Wesentliches an den Anwendungsfunktionen. Verschiedene von vielen Menschen verwendete Funktionsmodule wie Route (Routing), Eloquent ORM (Datenbank-ORM-Komponente), Request (Anfrage), Response (Antwort) usw. werden tatsächlich von Klassenmodulen bereitgestellt, die nichts mit dem Kern zu tun haben Der Prozess von der Registrierung über die Instanziierung dieser Klassen bis hin zur endgültigen Verwendung durch Sie liegt tatsächlich in der Verantwortung des Service-Containers von Laravel.
Der Dienstanbieter ist hauptsächlich in zwei Teile unterteilt: Registrieren (Registrierung) und Booten (Booten, Initialisierung)
3 Dienstanbieter
Eine Klasse muss Eigentum des sein Container Um extrahieren zu können, müssen Sie sich zunächst für diesen Container registrieren. Da Laravel diesen Container einen Service-Container nennt, müssen wir, wenn wir einen Service benötigen, zuerst den Service registrieren und an den Container binden. Dann ist das Ding, das den Service bereitstellt und den Service an den Container bindet, der Service-Provider.
4. Fügen Sie Ihre eigene Klasse zum IOC-Container hinzu
4.1 Erstellen Sie eine neue Validierungsklasse
4.2
4.3. Binden Sie die Validierungsklasse an den Provider
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class ValidateProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->bind('valicate',function(){ return new Validate(); }); } }
4.5, verwenden Sie
4.6, Erfolg!
5. Fassade
Fassade wird verwendet, um eine einheitliche Schnittstelle bereitzustellen, unabhängig davon, welchen Cache Sie verwenden, Redis oder Memcache Sie können die Methode „cache::get()“ verwenden, um den Wert abzurufen. Ob Sie Redis oder Memcahe verwenden, hängt davon ab, welche Methode Sie im Dienstanbieter gebunden haben. Die Implementierung von cache::get() besteht darin, die Facade-Methode getFacadeAccessor zu erben und den Schlüsselwert zurückzugeben, den Sie in den Container binden, z. B. den Cache. Dann verwendet die Facade-Klasse die PHP-Magievariable __callstatic() aus dem Container stammen. Analysieren Sie den an den Cache gebundenen Dienst, an den der zuvor erwähnte Dienstanbieter gebunden ist
5.1, zum Beispiel per E-Mail in config/app.php
5.2. Diese Klasse gibt nur einen Mailer zurück
5.3 Wenn ihre Sendemethode aufgerufen wird, wird sie in die Callstatic eingegeben magische Methode
5.4 Diese Methode ruft die Instanz von Mailer ab, also app('mailer')
5.5. Diese Instanz kann die Sendemethode der Mailer-Klasse aufrufen
6. Vertrag
Laravel's Vertrag ist eine Reihe von Schnittstellen, die die vom Framework bereitgestellten Kerndienste definieren. Beispielsweise definiert der IlluminateContractsQueueQueue-Vertrag die Methoden, die zum Einreihen von Aufgaben in die Warteschlange erforderlich sind, während der IlluminateContractsMailMailer-Vertrag die Methoden definiert, die zum Senden von E-Mails erforderlich sind. Das Framework stellt für jeden Vertrag entsprechende Implementierungen bereit.
Der Vorteil besteht darin, dass eine geringe Kopplung und Einfachheit des Programms erreicht wird.
Niedrige Kopplung#
Schauen wir uns zunächst etwas Code für die Cache-Implementierung mit hoher Kopplung an. Wie folgt:
In dieser Klasse ist das Programm stark mit dem angegebenen Cache gekoppelt. Weil wir auf eine bestimmte Caching-Klasse aus einem Erweiterungspaket angewiesen sind. Sobald die API dieser Erweiterung geändert wird, muss sich unser Code entsprechend ändern.<?php namespace App\Orders; class Repository { /** * 缓存实例。 */ protected $cache; /** * 创建一个仓库实例。 * * @param \SomePackage\Cache\Memcached $cache * @return void */ public function __construct(\SomePackage\Cache\Memcached $cache) { $this->cache = $cache; } /** * 按照 Id 检索订单 * * @param int $id * @return Order */ public function find($id) { if ($this->cache->has($id)) { // } } }
Wenn wir die zugrunde liegende Caching-Technologie (Memcached) durch eine andere Caching-Technologie (Redis) ersetzen möchten, müssen wir die Repository-Klasse ebenfalls erneut ändern. Die Repository-Klasse sollte nicht zu viel darüber wissen, wer die Daten bereitgestellt hat oder wie sie bereitgestellt wurden usw.
Im Vergleich zum obigen Ansatz können wir eine einfache, vom Erweiterungspaket unabhängige Schnittstelle verwenden, um unseren Code zu verbessern:
<?php namespace App\Orders; use Illuminate\Contracts\Cache\Repository as Cache; class Repository { /** * 缓存实例。 */ protected $cache; /** * 创建一个仓库实例。 * * @param Cache $cache * @return void */ public function __construct(Cache $cache) { $this->cache = $cache; } }
现在,更改之后的代码没有与任何扩展包甚至是 Laravel 耦合。而契约扩展包不包含任何实现和依赖项,你可以轻松地写任何给定契约的替代实现,来实现不修改任何关于缓存消耗的代码就可以替换缓存实现。
相关推荐:
Laravel 5.5中为响应请求提供的可响应接口详解_php实例
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Laravel 5.5-Kernarchitektur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

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.

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.


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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

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

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.