Что такое :: класс в php

Что это за ::class в PHP?

Быстрый поиск Google не перенастраивает ничего из-за характера синтаксиса.

класс толстой кишки

В чем преимущество использования этих обозначений?

 protected $commands = [ \App\Console\Commands\Inspire::class, ]; 

Эта функция была реализована в PHP 5.5.

Документация: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name

Это очень полезно по двум причинам.

  • Вам больше не нужно хранить имена классов в строках. Таким образом, многие IDE могут извлекать эти имена классов при рефакторинг кода
  • Вы можете использовать ключевое слово use для разрешения вашего класса, и вам не нужно писать полное имя класса.

Например :

 use \App\Console\Commands\Inspire; //... protected $commands = [ Inspire::class, // Equivalent to "\App\Console\Commands\Inspire" ]; 

Обновление :

Эта функция также полезна для привязки к позднему состоянию .

Вместо использования магической константы __CLASS__ вы можете использовать функцию static::class чтобы получить имя производного класса внутри родительского класса. Например :

 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 

class является специальным, который предоставляется php для получения полного имени класса.

См. 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! 

Имейте в виду использовать следующее:

 if ($whatever instanceof static::class) {...} 

Это вызовет синтаксическую ошибку:

неожиданный «класс» (T_CLASS), ожидающий переменную (T_VARIABLE) или «$»,

Но вы можете сделать следующее:

 $class = static::class; if ($whatever instanceof $class) {...} 

Возможно, это уже исправлено в PHP 7.