在PHP/Laravel中,“what”的合适术语是什么;模型::class“;是,给定'return$this->;belongsTo(Model::class)`

在PHP/Laravel中,“what”的合适术语是什么;模型::class“;是,给定'return$this->;belongsTo(Model::class)`,php,laravel-5,Php,Laravel 5,在此示例代码中: public function user() { return $this->belongsTo(User::class); } public function sandwich() { return $this->belongsTo(Sandwich::class); } 我想知道调用了什么User::class,因为您也可以这样编写上面的示例: public function user() { return $this->bel

在此示例代码中:

public function user()
{
    return $this->belongsTo(User::class);
}

public function sandwich()
{
    return $this->belongsTo(Sandwich::class);
}
我想知道调用了什么
User::class
,因为您也可以这样编写上面的示例:

public function user()
{
    return $this->belongsTo(\App\User);
}

public function sandwich()
{
    return $this->belongsTo(\App\Sandwich);
}
所以我喜欢Laravel在使用sugar语法时“只知道”模型在哪里,但它叫什么?我想阅读一些关于它的文档,以便更好地了解幕后发生的事情


它在某种程度上提醒了我“路由模型绑定”,因此我想要的答案是某个地方的相关文档页面的链接,或者是一个我可以通过谷歌了解那里到底发生了什么的术语。

事实上,拉雷维尔不知道模型在哪里

如果此示例有效:

公共函数用户()
{
返回$this->belongsTo(用户::类);
}
这是因为模型可能位于同一个文件夹中,或者如果不是,您可能应该从其他名称空间导入所需的模型,就像这样


//在文件的顶部,您将导入该类
使用Maybe\other\Folder\Namespace\OtherObject;
公共函数用户()
{
返回$this->belongsTo(其他对象::类);
}
如果你不想“导入”对象,你应该像这样使用类的完整路径

公共函数用户()
{
返回$this->belongsTo(App\OtherFolder\OtherObject::class);
}
总之,laravel不知道在哪里查找类定义,但是如果您在参数中传递一个实例,该实例将为解析,但这是与模型绑定更相关的另一个主题

公共函数方法(MyObject$instance)
{
//Laravel将尝试自动生成$instance的实例
}

实际上,拉威尔不知道模型在哪里

如果此示例有效:

公共函数用户()
{
返回$this->belongsTo(用户::类);
}
这是因为模型可能位于同一个文件夹中,或者如果不是,您可能应该从其他名称空间导入所需的模型,就像这样


//在文件的顶部,您将导入该类
使用Maybe\other\Folder\Namespace\OtherObject;
公共函数用户()
{
返回$this->belongsTo(其他对象::类);
}
如果你不想“导入”对象,你应该像这样使用类的完整路径

公共函数用户()
{
返回$this->belongsTo(App\OtherFolder\OtherObject::class);
}
总之,laravel不知道在哪里查找类定义,但是如果您在参数中传递一个实例,该实例将为解析,但这是与模型绑定更相关的另一个主题

公共函数方法(MyObject$instance)
{
//Laravel将尝试自动生成$instance的实例
}

语法为。此语法返回完全限定类名的字符串表示形式,包括否则忽略的任何命名空间信息


此功能的几个好处是1。不需要显式指定类的完全限定命名空间,以及2。能够以字符串形式传递完全限定的命名空间,同时允许IDE在重构或搜索引用时定位类名。

语法为。此语法返回完全限定类名的字符串表示形式,包括否则忽略的任何命名空间信息

此功能的几个好处是1。不需要显式指定类的完全限定命名空间,以及2。能够以字符串形式传递完全限定的命名空间,同时允许IDE在重构或搜索引用时定位类名

我想知道User::class被称为什么

一个健康的名称是类名解析。它结合了PHP解析运算符
关键字。它不是Laravel语法,而是PHP语法

在所有情况下,它都返回类的完全限定名称,该名称只是一个包含类文件的绝对/相对路径的字符串,具体取决于使用它的文件/类的名称空间

。。。使用ClassName::class获取类ClassName的完全限定名

另一方面,根据您提到的Laravel用例

公共函数用户()
{
返回$this->belongsTo(用户::类);
}
Laravel Eloquent方法
belongsTo()
和所有类似的方法都指定要传递的参数是字符串。这些方法解析字符串参数以定位模型的类定义

传递给
hasOne
方法的第一个参数是相关模型的名称

因此使用

返回$this->belongsTo('\App\User');

返回$this->belongsTo(用户::类);
在语法上是等价的。这意味着方法定义完全相同,并且没有参数类型检查,因为两个参数都是字符串

所以我喜欢Laravel“只知道”当你使用这个语法时模型在哪里

是的,它只是知道。但这确实是直截了当的。它使用Eloquent方法的字符串参数(现在我们知道,不管语法如何,它都是字符串)和当前类提供的名称空间来定位模型定义

例如,这个类定义


我想知道User::class被称为什么

一个健康的名称是类名解析。它结合了PHP解析运算符
关键字。它不是Laravel语法,而是PHP语法

在所有情况下,它都返回类的完全限定名称,该名称只是一个包含ab的字符串