Risposte:
Questa funzionalità è stata implementata in PHP 5.5.
Documentazione: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
È molto utile per 2 motivi.
use
parola chiave per risolvere la tua classe e non è necessario scrivere il nome completo della classe.Per esempio :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Aggiornamento :
Questa funzione è utile anche per il binding statico tardivo .
Invece di usare la __CLASS__
costante magica, puoi usare la static::class
funzione per ottenere il nome della classe derivata all'interno della classe genitore. 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
use \App\...
e use App\...
sono consentite. Lo uso per fare la differenza tra una classe contenuta in uno spazio dei nomi secondario e una classe contenuta all'esterno della gerarchia dello spazio dei nomi corrente.
class
è speciale, fornito da php per ottenere il nome completo della classe.
Vedi http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name .
<?php
class foo {
const test = 'foobar!';
}
echo foo::test; // print foobar!
Se sei curioso in quale categoria ::class
rientra (che si tratti di un costrutto di linguaggio, ecc.), È molto semplice. È una costante . PHP lo chiama "Costante speciale". È speciale perché è fornito da PHP.
Si prega di essere consapevoli di utilizzare quanto segue:
if ($whatever instanceof static::class) {...}
Questo genererà un errore di sintassi:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Ma puoi invece fare quanto segue:
if ($whatever instanceof static) {...}
o
$class = static::class;
if ($whatever instanceof $class) {...}
$className = 'SomeCLass'; $className = new $className(); $methodName = 'someMethod'; $className->$methodName($arg1, $arg2, $arg3); /* or if args can be random array*/ call_user_func_array([$className, $methodName], $arg);
Inspire::class
è equivalente a "App \ Console \ Commands \ Inspire", senza il prefisso della barra rovesciata.