2015-08-19 22 views
5

In laravel 5.1, il kernel per la classe CLI sembra qualcosa di similelaravel - Perchè il `class` :: costante

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

è il cambiamento di utilizzare il predefinito/magia costante ::class

\App\Console\Commands\Inspire::class 

funzionalmente diverso dal semplice utilizzo del nome della classe?

\App\Console\Commands\Inspire 

risposta

6

No, utilizzando ::class su una classe restituisce il nome completo della classe, in modo che sia la stessa cosa di scrittura 'App\Console\Commands\Inspire' (tra virgolette, in quanto si tratta di una stringa). La parola chiave class è nuova a PHP 5.5.

Sembra strano in questo esempio, ma può essere utile ad es. test o nella definizione delle relazioni. Per esempio, se ho una classe Article e una classe ArticleComment, potrei finire per fare

use Some\Long\Namespace\ArticleComment; 

class Article extends Model { 

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

} 

Riferimento: PHP Docs.

+0

Derp, grazie! Ho dimenticato il vecchio modo di includere i nomi delle classi con le stringhe (dato che PHP non riconosce i nomi delle classi che stanno in piedi da soli). –

6

Per l'esecuzione del codice non fa differenza, ma la costante ::class è molto utile con gli strumenti di sviluppo. Se si utilizza il nome della classe si deve scrivere come stringa '\App\Console\Commands\Inspire' - che significa:

  1. No completamento IDE auto
  2. No suport di refactoring automatico ("Rinomina classe")
  3. No namespace risolvere
  4. Non c'è modo di rilevare automaticamente usi (IDE) o le dipendenze (PDEPEND)

nota laterale: Prima di PHP 5.5 è uscito, ho usato per definire un costante __CLASS nella maggior parte delle mie classi proprio per questo scopo:

class X { 
    const __CLASS = __CLASS__; 
} 
+0

Questa dovrebbe essere una risposta accettata. – e1v

Problemi correlati