Respostas:
Este recurso foi implementado no PHP 5.5.
Documentação: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
É muito útil por 2 motivos.
use
palavra-chave para resolver sua classe e não precisa escrever o nome completo da classe.Por exemplo :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Atualização :
Este recurso também é útil para Late Static Binding .
Em vez de usar a __CLASS__
constante mágica, você pode usar o static::class
recurso para obter o nome da classe derivada dentro da classe pai. Por exemplo:
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\...
são permitidas. Eu uso isso para fazer a diferença entre uma classe contida em um subnamespace e uma classe contida fora da hierarquia de namespace atual.
class
é especial, que é fornecido pelo php para obter o nome de classe totalmente qualificado.
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!
Se você está curioso em qual categoria se ::class
encaixa (se é uma construção de linguagem, etc), é muito simples. É uma constante . PHP a chama de "Constante Especial". É especial porque é fornecido pelo PHP.
Esteja ciente de usar o seguinte:
if ($whatever instanceof static::class) {...}
Isso gerará um erro de sintaxe:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Mas você pode fazer o seguinte:
if ($whatever instanceof static) {...}
ou
$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", sem o prefixo de barra invertida.