Respuestas:
Esta característica se implementó en PHP 5.5.
Documentación: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Es muy útil por 2 razones.
use
palabra clave para resolver su clase y no necesita escribir el nombre completo de la clase.Por ejemplo :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Actualización :
Esta función también es útil para el enlace estático tardío .
En lugar de usar la __CLASS__
constante mágica, puede usar la static::class
función para obtener el nombre de la clase derivada dentro de la clase principal. Por ejemplo:
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\...
y use App\...
están permitidas. Lo uso para marcar la diferencia entre una clase contenida en un subespacio de nombres y una clase contenida fuera de la jerarquía actual del espacio de nombres.
class
es especial, que es proporcionado por php para obtener el nombre de clase completo.
Consulte 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!
Si tiene curiosidad en qué categoría ::class
pertenece (ya sea una construcción del lenguaje, etc.), es muy simple. Es una constante . PHP lo llama una "constante especial". Es especial porque lo proporciona PHP.
Tenga en cuenta que debe utilizar lo siguiente:
if ($whatever instanceof static::class) {...}
Esto arrojará un error de sintaxis:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Pero puedes hacer lo siguiente en su lugar:
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
es equivalente a "App \ Console \ Commands \ Inspire", sin el prefijo de barra invertida.