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

dev*_*raj 8 php yii yii2

我知道两者都给出了相同的结果,但我期待听到性能.

我不确定,但我认为..

  • " MyClass::className()"导致该类文件也被加载(它的Yii函数只是简单的身体get_called_class())

  • " MyClass::class"我认为这个php的本机类属性不会加载类php文件,只是根据当前命名空间或者返回它的名称use.

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

有很多地方我们只想要完全合格的班级名称,即使它不会在那个时候使用.但我也不喜欢放硬编码的字符串(由于难以重构)

dev*_*raj 5

是的我发现我是对的.

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

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

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

注意:使用:: class的类名解析是编译时转换.这意味着在创建类名字符串时,尚未发生自动加载.因此,即使该类不存在,类名也会扩展.在这种情况下不会发出错误.

  • Yii函数是抽象的,因此将来可以更改.使用`:: class`会禁用此功能.您还应该对两个版本进行基准测试. (2认同)