Відповіді:
Ця функція була реалізована в 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
use \App\...
та use App\...
дозволені. Я використовую це, щоб зробити різницю між класом, що міститься в просторі імен, і класом, що міститься за межами поточної ієрархії простору імен.
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!
Якщо вам цікаво, до якої категорії ::class
потрапляє (чи це мовна конструкція тощо), це дуже просто. Це постійна . PHP називає це "Особливою постійною". Це особливе, оскільки це надає PHP.
Будь ласка, пам’ятайте про використання наступного:
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) {...}
$className = 'SomeCLass'; $className = new $className(); $methodName = 'someMethod'; $className->$methodName($arg1, $arg2, $arg3); /* or if args can be random array*/ call_user_func_array([$className, $methodName], $arg);
Inspire::class
еквівалентно "App \ Console \ Commands \ Inspire", без префіксу зворотньої косої риски.