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
WBOYOriginal
2016-08-04 09:22:111686Durchsuche

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>

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>

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>

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

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