为了学习它是什么样的野兽,我上周一直在为Laravel阅读很多文档。
我注意到有一件事,每当有人引用某个类时,他都会将其称为字符串,例如:
public function user()
{
return $this->belongsTo('App\User');
}
注意'App\User'
从这里采取https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations
我想知道他们为什么不把它作为App\User::class
引用?
在这种情况下,输入和支持代码会更容易,因为按Ctrl + B后按类更容易。此外,重构更容易,并且更难犯错,因为IDE会警告您,如果您输入错误,该类不存在。
我认为没有理由将类User引用为'App\User'
而不是App\User::class
。
你看到了吗?
答案 0 :(得分:1)
实际字符串用于说明它是相关模型的完整类名。您可以非常轻松地使用Model::class
。文档中的示例是明确的,并且从读取该参数的人那里删除任何可能的猜测工作。
答案 1 :(得分:1)
从PHP doc Class Constants获取:
从PHP 5.5.0开始,special :: class常量可用,并允许在编译时完全限定类名解析,这对于命名空间类很有用:
这意味着根据您提供的示例,使用User::class
将在运行时解析为'App\User'
。所以选择权归你所有。
就个人而言,为了避免使用字符串排版错误,我更喜欢使用类常量分辨率,而且我也可以轻松地检查来自IDE的用法。
此外,我不必记住我正在使用的类的命名空间。
除了这些好处之外,我没有看到任何差异,除非有性能差异,显然似乎并非如此。