Опубликовано 24.03.2022
::className() - это статический метод Yii, класса yii\base\BaseObject, который уже объявлен устаревшим и не рекомендуемым к использованию с версии Yii 2.0.14.
::class - это часть языка PHP, специальная константа всех классов, которой на этапе компиляции присваивается полное имя класса.
Оба эти способа возвращают одно и тоже значение - полное имя класса с учетом пространства имен.
В реальной работе с современными версиями PHP (выше 5.5) и Yii (выше 2.0.14) следует использовать константу ::class и избегать использования ::className().
Разницы в производительности я не заметил, но теоретически ::class должно работать быстрее.
Метод ::className() основан на стандартной функции PHP get_called_class.
https://www.php.net/manual/ru/function.get-called-class.php
Для того, чтобы получить полное имя класса из экземпляра нужно воспользоваться функцией get_class. Это можно сделать внутренним и внешним способом.
Внешний: создать экземпляр класса и передать его в качестве аргумента.
class TestClass
{
}
$test = new TestClass();
get_class($test);
Внутренний: вызвать get_class без параметров внутри не статичного метода экземпляра класса.
class TestClass
{
public function getClassName() {
return get_class();
}
}
$test = new TestClass();
$test->getClassName();