Qual é a ::class
notação em PHP?
Uma rápida pesquisa no Google não retorna nada devido à natureza da sintaxe.
classe de cólon e cólon
Qual é a vantagem de usar essa notação?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
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
Inspire::class
é equivalente a "App \ Console \ Commands \ Inspire", sem o prefixo de barra invertida.use \App\...
euse 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 .
fonte
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.https://www.php.net/manual/en/language.oop5.constants.php
fonte
Esteja ciente de usar o seguinte:
Isso gerará um erro de sintaxe:
Mas você pode fazer o seguinte:
ou
fonte
$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);