Подтвердить что ты не робот

Что такое :: класс в PHP?

Что такое нотация ::class в PHP?

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

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

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

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

Ответ 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

Ответ 3

Пожалуйста, помните, чтобы использовать следующее:

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) {...}