Yii2中:: class vs :: className()之间的区别?

时间:2016-07-14 15:20:34

标签: php yii yii2

我知道两者都给出了相同的结果,但我很期待听到表现。

我不确定,但我认为..

  • " Button"导致该类文件也被加载(其Yii函数,其主体只是MyClass::className()

  • " get_called_class()"我认为这个php的本地类属性不会加载类php文件,只是根据当前命名空间或MyClass::class返回其名称。

如果我是对的,请告诉我?或者请突出您的知识。

有很多地方我们只想要完整的有质量的班级名称,即使它不会被使用。但我也不喜欢把硬编码的字符串(由于难以重构)

2 个答案:

答案 0 :(得分:5)

是的,我发现我是对的。

PHP的本机类属性可以节省性能..(PHP 5.5 +)

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

所以这不会导致加载类文件,因此即使类不存在,它也会返回完整的className

  

注意:使用:: class的类名解析是编译时   转型。这意味着当时类名字符串是   创建没有自动加载已经发生。因此,班级名称   即使该类不存在,也会扩展。没有发出错误   那种情况。

答案 1 :(得分:0)

get_called_class()用于静态方法。

Yii使用autoloading所以无论如何都要加载类。因此这两个命令之间没有显着的时间差异。

在自己的代码上查看性能更为重要。并检查并了解Yii 2.0的这些性能调整链接:Yii2-Docs: Performance TuningYii2-Docs:Lazy Loading and Eager Loading