Что такое нотация ::class
в PHP?
Быстрый поиск в Google ничего не возвращает из-за природы синтаксиса.
класс толстой кишки
В чем преимущество использования этой записи?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
Что такое нотация ::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
Это очень полезно по 2 причинам.
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) {...}
Это выдаст синтаксическую ошибку:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Но вместо этого вы можете сделать следующее:
if ($whatever instanceof static) {...}
или же
$class = static::class;
if ($whatever instanceof $class) {...}