Ответ 1
Эта функция была реализована в PHP 5.5.
Документация: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Это очень полезно по 2 причинам.
- Вам больше не нужно хранить имена классов в строках. Таким образом, многие 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