2017-11-20 4 views
0

Ich habe eine Menge Dokumentation für Laravel letzte Woche gelesen, um zu lernen, was für ein Biest es ist. er verweist auf ihn als String, zBLaravel - Referenzieren der Klasse

Ich bemerkte eine Sache, dass, wenn jemand etwas Klasse verweist:

public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 

Achten Sie auf 'App\User'

von hier Genommen https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations

Ich frage mich, warum don Beziehen sie es als App\User::class?

In diesem Fall ist es einfacher, den Code einzugeben und zu unterstützen, da es später einfacher ist, der Klasse zu folgen, indem Sie Strg + B drücken. Auch das Refactoring ist einfacher und es ist schwieriger, einen Fehler zu machen, weil IDE Sie warnt, dass die Klasse nicht existiert, wenn Sie einen Tippfehler machen.

Ich sehe keine Gründe, Benutzer Klasse als 'App\User' statt App\User::class zu verweisen.

Sehen Sie irgendwelche?

+2

In diesem Fall: Tu, was auch immer deine Ziege schwimmt! Es sollte dasselbe sein. Eine gute IDE sollte Sie jedoch auch vor Namespaces/Class-Typos warnen. –

+1

Die special :: class Konstante ist in der PHP Version> = 5.5.0 verfügbar. Für frühere Versionen wird 'App \ User' verwendet. Sie können verwenden, was auch immer Sie mögen. –

Antwort

1

Die tatsächliche Zeichenfolge wird verwendet, um zu veranschaulichen, dass es sich um den vollständigen Klassennamen des verwandten Modells handelt. Sie können sehr einfach Model::class verwenden. Das Beispiel in der Dokumentation ist explizit und entfernt potenzielle Schätzergebnisse von jemandem, der dieses Argument liest.

1

Einnahme von PHP doc Class Constants:

Die spezielle :: Klasse konstant sind als von PHP 5.5.0 und ermöglicht vollständig qualifizierten Klassennamen Auflösung bei der Kompilierung, ist dies nützlich für benannte Klassen:

Das bedeutet, dass die Verwendung von User::class zur Laufzeit gemäß dem von Ihnen angegebenen Beispiel zu 'App\User' aufgelöst wird. Also die Wahl liegt bei dir.

Auf eine persönliche Anmerkung, Um typografische Fehler mit Strings zu vermeiden, verwende ich lieber die Klasse konstante Auflösung, und ich kann auch einfach die Verwendung von meiner IDE überprüfen.

Auch ich muss nicht den Namespace der Klasse merken, die ich verwende.

Abgesehen von diesen Vorteilen sehe ich keinen Unterschied, außer es gibt Leistungsunterschiede, die offensichtlich nicht so scheinen.

Verwandte Themen