Questa funzione è stata implementata in PHP 5.5.
Documentazione: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
E 'molto utile per 2 motivi.
- Non è necessario memorizzare i nomi delle classi nelle stringhe. Quindi, molti IDE possono recuperare questi nomi di classe quando si effettua il refactoring del codice
- È possibile utilizzare la parola chiave
use
per risolvere la classe e non è necessario scrivere il nome completo della classe.
Per exemple:
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "\App\Console\Commands\Inspire"
];
Aggiornamento:
Questa funzione è anche utile per Late Static Binding.
Invece di utilizzare la costante magica __CLASS__
, è possibile utilizzare la funzione static::class
per ottenere il nome della classe derivata all'interno della classe padre. Per Esempio:
class A {
public function getClassName(){
return __CLASS__;
}
public function getRealClassName() {
return static::class;
}
}
class B extends A {}
$a = new A;
$b = new B;
echo $a->getClassName(); // A
echo $a->getRealClassName(); // A
echo $b->getClassName(); // A
echo $b->getRealClassName(); // B
C'è un motivo per cui Laravel ha deciso di passare ad esso? – Yada
Non è una costante nella classe Inspire. È una costante fornita da php. È un modo rapido per ottenere il nome completo della classe. http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name – jfadich
@ Yada Credo che il ragionamento dietro Laravel che lo usa sia che ti dà un posto in meno da fare un errore di battitura.Puoi usare la stringa "\ App \ Console \ Commands \ Inspire" o Inspire :: class per ottenere la stessa cosa, ma il tuo IDE rileverà errori di sintassi/di ortografia su quest'ultimo rendendolo un po 'più facile da eseguire il debug. – jfadich