Разница между Model::className() и Model::class в yii2?


Опубликовано 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();

 


Объявление
Stand with Ukraine!