Эта функция была реализована в PHP 5.5.
Документация: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Это очень полезно по двум причинам.
- Вам больше не нужно хранить имена классов в строках. Таким образом, многие 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
Inspire::class
эквивалентно "App \ Console \ Commands \ Inspire" без префикса обратной косой черты.use \App\...
иuse App\...
разрешены. Я использую это, чтобы различать класс, содержащийся в подпространстве имен, и класс, содержащийся вне текущей иерархии пространства имен.class
является специальным, предоставляемым php для получения полного имени класса.См. Http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name .
источник
Если вам интересно, к какой категории
::class
относится (будь то языковая конструкция и т. Д.), Это очень просто. Это константа . PHP называет это «специальной константой». Он особенный, потому что предоставляется PHP.https://www.php.net/manual/en/language.oop5.constants.php
источник
Помните, что нужно использовать следующее:
Это вызовет синтаксическую ошибку:
Но вместо этого вы можете сделать следующее:
или
источник
$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);