Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte grafische Erklärung der Kernarchitektur von Laravel 5.5

Detaillierte grafische Erklärung der Kernarchitektur von Laravel 5.5

php中世界最好的语言
php中世界最好的语言Original
2018-03-24 15:36:042931Durchsuche

Dieses Mal bringe ich Ihnen eine detaillierte grafische und textliche Erklärung der Kernarchitektur von Laravel 5.5. Was sind die Vorsichtsmaßnahmen bei der Verwendung der Kernarchitektur von Laravel 5.5? .

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Inhalte zur Kernarchitektur von Laravel 5.5 vor und stellt sie Ihnen als Referenz und zum Studium zur Verfügung . Ich werde im Folgenden nichts sagen, werfen wir einen Blick auf die detaillierte Einführung.

1. Die Abhängigkeitsinjektion

-Methode übergibt den Komponentennamen und das Framework instanziiert ihn automatisch kann direkt

verwenden, zum Beispiel das am häufigsten verwendete Anforderungsobjekt

2. Servicecontainer

Tatsächlich ist der Kern von Laravel ein IoC-Container. Der Kern von Laravel selbst ist sehr leichtgewichtig und verfügt über keine magischen oder wesentlichen 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, Initialisieren)

3. Dienstanbieter

Damit eine Klasse von einem Container extrahiert werden kann, muss sie zunächst beim Container registriert werden. Da Laravel diesen Container als Service-Container bezeichnet, 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. Erstellen Sie einen neuen ValidateProvider

4.3. Binden Sie die Validate-Klasse 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.4. Provider zum IOC-Container hinzufügen

4.5 🎜>

4.6.

5. Fassade Fassade wird beispielsweise verwendet, um eine einheitliche Schnittstelle bereitzustellen Unabhängig davon, welchen Cache Sie verwenden, Redis oder Memcache, kann der Client die Methode „cache::get()“ verwenden, um den Wert abzurufen. Ob Sie Redis oder Memcahe verwenden, hängt davon ab, welchen 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 im Container binden, z. B. Cache. Anschließend verwendet die Facade-Klasse die

php Magic-Variable

callstatic() , callstatic Die Logik analysiert den durch den Cache gebundenen Dienst aus dem Container, an den der oben erwähnte Dienstanbieter gebunden ist

5.1, zum Beispiel E-Mail in config/app.php

5.2. Diese Klasse gibt nur einen Mailer zurück

5.3. Wenn Sie es aufrufen Wenn die Sendemethode nicht vorhanden ist, wird die callstatic

magische Methode eingegeben

5.4、这个方法会得到mailer的实例,即app('mailer')

5.5、这个实例便能调用mailer类的send方法

6、契约

Laravel 的契约是一组定义框架提供的核心服务的接口。例如,Illuminate\Contracts\Queue\Queue契约定义了队列任务所需的方法,而Illuminate\Contracts\Mail\Mailer契约定义了发送电子邮件所需的方法。框架对每个契约都提供了相应的实现。

好处是实现了程序的低耦合和简单性。

低耦合#

首先,让我们来看一些高耦合缓存实现的代码。如下:

<?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)) {
  //
 }
 }
}

这个类中,程序跟给定的缓存实现高耦合。因为我们依赖于一个扩展包的特定缓存类。一旦这个扩展包的 API 被更改了,我们的代码就必须跟着改变。

同样的,如果我们想要将底层的的缓存技术( Memcached )替换为另一种缓存技术( Redis ),那又得再次修改这个repository类。而repository类不应该了解太多关于谁提供了这些数据或是如何提供的等等。

比起上面的做法,我们可以使用一个简单的、与扩展包无关的接口来改进我们的代码:

<?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;
 }
}

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

php自定义二维数组排序函数array

phpunit接口自动化测试功能的实现

Das obige ist der detaillierte Inhalt vonDetaillierte grafische Erklärung der Kernarchitektur von Laravel 5.5. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Werbeklickstatistik PHP+MySQLNächster Artikel:Werbeklickstatistik PHP+MySQL