Что это за ::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
Это очень полезно по двум причинам.
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.