2017-11-30 1 views
1

Ich habe zwei Fragen bezüglich der Verwendung von "verwenden" Schlüsselwort in PHP (Laravel).Was ist das Konzept hinter der Verwendung von "use" Schlüsselwort in verschiedenen Kontext auf Laravel?

Unten finden Sie einen Codeauszug aus Laravel docs:

use App\Flight; 

$flights = App\Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

Der Code in Zeile 1 erlaubt es uns, Flugmodell zu verwenden und Linie 2 hat eine Erklärung, die alle Datensätze abruft. Also, in Zeile 2 können wir nicht einfach Flight::all(); anstelle von App\Flight::all(); sagen. Sind beide korrekt und bezieht es sich auf relative und absolute Path-Sachen?

zweite Abfrage (bezogen auf softDeletes): Unten ist ein Codeblock von einem meiner Modelle:

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 

class Post extends Model 
{ 
    use SoftDeletes; 
    protected $dates = ['deleted_at']; 
    protected $fillable = ['title','body']; 
} 

Hier auf der Linie 6, die folgende Anweisung verwendet wird:

use SoftDeletes; 

Warum Verwenden wir wieder verwenden Stichwort mit softDeletes, weil wir das nicht mit Modell und einfach konnten wir tun:

class Post extends Model 

ohne die folgende Code-Anweisung:

use Model; 

bei Modellen.

+0

erste ist Modell und zweite ist Merkmal –

+0

https://stackoverflow.com/questions/29001191/laravel-5-use-statements dieser Link kann Ihnen zum besseren Verständnis der Verwendung Aussage am Anfang einer Datei und verwenden Anweisung innerhalb der Klassendatei ist ein Merkmal, siehe http://php.net/manual/en/language.oop5.traits.php – Sohel0415

Antwort

2

1 - use als Import App\Flight Klasse verwendet. Folgende Anweisungen sind beide korrekt Flight::all() und \App\Flight::all() (Die \ vorne ist wichtig, wenn Sie die \ in Front lassen, sucht PHP nach Namespace aus dem aktuellen Namespace - relativ).

2 - use verwendet im Zusammenhang mit TraitsManual. SoftDeletes ist ein Merkmal & Model ist eine Klasse.

3

Der Befehl use in PHP wird zum Importieren/Alias ​​Namespaces (docs) verwendet.

Als Erstes müssen Sie wissen, dass dieser Befehl drei Arten von Import/Aliasing unterstützt: Klassen, Schnittstellen und Namespaces.

Ihr erstes Beispiel ist eine Klasse-Import:

use App\Flight; 

$flights = Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

Es im Grunde die Klasse importiert Flight innerhalb des Namespace App, so dass wir davon ausgehen, dass die Klasse wie folgt beginnen würde:

namespace App; 

... 

class Flight extends Model {...} 

Wie Als Alternative könnten Sie einfach den Namespace importieren und die Klasse mit dem Namespace referenzieren, zu dem sie gehört:

Oder Sie können vermeiden, überhaupt etwas zu importieren und verwenden Sie absolute Bezüge:

$flights = \App\Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

In Ihrem zweiten Beispiel SoftDeletes ist ein trait, die zu einer Klasse ähnlich, aber nur in einer konsistenten Art und Weise zu Gruppenfunktionalität bestimmt ist (In diesem Fall alle Methoden, die zum Ausführen von Soft-Löschvorgängen erforderlich sind.

Das Merkmal sieht wie folgt aus:

namespace Illuminate\Database\Eloquent; 

trait SoftDeletes{...} 

Wie Sie es folgt der gleichen Logik sehen wie zuvor: Blick in den Namespace Illuminate\Database\Eloquent und verwenden Sie die Klasse/Merkmal SoftDeletes so kann ich es verweisen.

Hoffe das hilft dir.

Verwandte Themen