Heim > Backend-Entwicklung > PHP-Tutorial > Welche ist besser, die Abhängigkeitsinjektion oder die ::call-Methode, und was ist der Unterschied?

Welche ist besser, die Abhängigkeitsinjektion oder die ::call-Methode, und was ist der Unterschied?

WBOY
Freigeben: 2016-08-04 09:22:11
Original
1692 Leute haben es durchsucht

Entschuldigung, Laravel hängt davon ab, __construct(User $user) in den Konstruktor der Klasse einzufügen, und dann werden alle nachfolgenden Methoden direkt mit $this->user aufgerufen. Was ist der Unterschied zwischen der Verwendung von User::find( ) direkt? Welches empfehlen Sie?

Antwortinhalt:

Entschuldigung, Laravel hängt davon ab, __construct(User $user) in den Konstruktor der Klasse einzufügen, und dann werden alle nachfolgenden Methoden direkt mit $this->user aufgerufen. Was ist der Unterschied zwischen der Verwendung von User::find( ) direkt? Welches empfehlen Sie?

Das ist der Unterschied zwischen statischen Methoden und dynamischen Methoden in PHP-Klassen.
Statische Methoden können direkt über class::function ohne Klasseninstanziierung verwendet werden, sie müssen jedoch mit dem Schlüsselwort static deklariert werden.
Dynamische Methoden müssen durch Instanziierung der Klasse aufgerufen werden.

<code class="php">$class= new Class;
$class->somefunc();</code>
Nach dem Login kopieren

Es gibt kein Besseres oder Schlechteres zwischen den beiden Methoden. Der Schlüssel hängt vom verwendeten Szenario ab.
Wenn die logische Korrelation nicht sehr eng ist, wird im Allgemeinen empfohlen, statische Methoden zu verwenden. Denn die dynamische Methode muss tatsächlich einen impliziten Parameter übergeben: $this, der sich geringfügig auf die Leistung auswirkt.

Ich kenne PHP nicht, aber „sich auf Schnittstellen zu verlassen, nicht auf Implementierungen“ ist eine Grundidee im Bereich der Programmierung.
Aber die Schnittstelle ist kein tatsächliches Objekt. Wir können alle Injektionen physisch an einem Ort sammeln. Wenn Sie auf diese Weise die Implementierung einer Klasse ändern möchten, müssen Sie nur eine Stelle ändern.

<code>Class A{
    function __construct(User $user){
    }
}
Class B{
    function __construct(){
        $user = User::find(['id'=>1]);
    }
}
$user = User::find(['id'=>1]);
$a = new A($user);
$b = new B();
</code>
Nach dem Login kopieren

Wenn sich in Zukunft geschäftliche Änderungen ergeben, verwenden Sie
GoodUser erweitert den Benutzer. {}
Der Code muss geändert werden

<code>Class B{
    function __construct(){
        $user = GoodUser::find(['id'=>1]);
    }
}
$user = GoodUser::find(['id'=>1]);
$a = new A($user);
$b = new B();
</code>
Nach dem Login kopieren

Haben Sie bemerkt, dass die Klasse B geändert wurde? ! ! !
Das heißt, es verstößt gegen das Offen- und Geschlossen-Prinzip.
Das ist ungefähr ~ Heehee

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage