2015-08-19 5 views
5

In Laravel 5.1, der Kernel für die CLI-Klasse so etwas wie diesesLaravel - Warum die `:: CLASS` Constant

#File: app/Console/Kernel.php 
class Kernel extends ConsoleKernel 
{ 
    //...  
    protected $commands = [ 
     \App\Console\Commands\Inspire::class, 
    ]; 
    //... 
} 

Ist die Änderung mit der vordefinierten/magic Konstante ::class

\App\Console\Commands\Inspire::class 
sieht

funktional anders als einfach mit dem Klassennamen?

\App\Console\Commands\Inspire 

Antwort

6

Nö, mit ::class auf eine Klasse gibt den vollständig qualifizierten Klassennamen, so dass es die gleiche Sache 'App\Console\Commands\Inspire' wie das Schreiben (in Anführungszeichen, da es sich um eine Zeichenfolge ist). Das Schlüsselwort class ist neu in PHP 5.5.

Es sieht in diesem Beispiel albern aus, aber es kann z.B. Testen oder Definieren von Relationen. Zum Beispiel, wenn ich eine Article Klasse und eine ArticleComment Klasse haben, könnte ich bis tun

use Some\Long\Namespace\ArticleComment; 

class Article extends Model { 

    public function comments() 
    { 
     return $this->hasMany(ArticleComment::class); 
    } 

} 

Referenzendlagen: PHP Docs.

+0

Derp, danke! Ich habe den alten Weg vergessen, der die Klassennamen mit Strings umgibt (da PHP die Klassennamen nicht selbstständig tokenisiert). –

6

Für die Ausführung des Codes macht es keinen Unterschied, aber die ::class Konstante ist am nützlichsten mit Entwicklungstools. Wenn Sie die Klassennamen verwenden, müssen Sie es als String schreiben '\App\Console\Commands\Inspire' - das heißt:

  1. Keine IDE Auto-Vervollständigung
  2. Kein suport des automatischen Refactoring („umbenennen Klasse“)
  3. Keine Namespace Lösung
  4. No way Nutzungen (IDE) oder Abhängigkeiten automatisch zu erkennen (pDepend)

Randbemerkung: Vor PHP 5.5 herauskam, habe ich eine definieren Konstante __CLASS in den meisten meiner eigenen Klassen für genau diesen Zweck:

class X { 
    const __CLASS = __CLASS__; 
} 
+0

Dies sollte eine akzeptierte Antwort sein. – e1v

Verwandte Themen