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.
- Ya no tienes que almacenar los nombres de tus clases en cadenas. Por lo tanto, muchos IDE pueden recuperar estos nombres de clase cuando refactoriza su código
- Puede usar la
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
Inspire::class
es equivalente a "App \ Console \ Commands \ Inspire", sin el prefijo de barra invertida.use \App\...
yuse 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 .
fuente
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.https://www.php.net/manual/en/language.oop5.constants.php
fuente
Tenga en cuenta que debe utilizar lo siguiente:
Esto arrojará un error de sintaxis:
Pero puedes hacer lo siguiente en su lugar:
o
fuente
$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);