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