Home » Php » php – Difference between ::class vs ::className() in Yii2?

php – Difference between ::class vs ::className() in Yii2?

Posted by: admin July 12, 2020 Leave a comment

Questions:

i know both gives same results but i am looking forward to hear about performance.

i am not sure but i think..

  • MyClass::className()” cause that class file to be loaded as well (its Yii function whom body is just simply get_called_class())

  • MyClass::class” i think this php’s native class property don’t load class php file and just return its name based on current namespace or use.

Let me know if i am right? or highlight your knowledge please.

There are many places where we just want full qualitfied class name even it’s not going to be used that time. but i also don’t like putting hardcoded strings (due to hard refactoring)

How to&Answers:

Yes i just found i was right.

PHP’s native class property is performance saving..(PHP 5.5+)

see here http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class.name

so this don’t cause class file to be loaded, so even if class doesn’t exists it will return full className

Note: The class name resolution using ::class is a compile time
transformation. That means at the time the class name string is
created no autoloading has happened yet. As a consequence, class names
are expanded even if the class does not exist. No error is issued in
that case.

Answer:

get_called_class() is for using in static methods.

Yii uses autoloading so the classes are loaded anyway. So there is no significant time difference between these both commands.

It’s more important to look on the performance on your own code. And check and understand these performance tuning links for Yii 2.0: Yii2-Docs: Performance Tuning and Yii2-Docs:Lazy Loading and Eager Loading