Php Laravel名称空间,它是如何工作的?

Php Laravel名称空间,它是如何工作的?,php,laravel,namespaces,composer-php,Php,Laravel,Namespaces,Composer Php,我是新来的拉威尔5,我想有人向我解释拉威尔的名字空间是如何工作的 因此,我在app/models/Variant.php中有一个名为Variant的类,我的代码如下所示 namespace App; use Illuminate\Database\Eloquent\Model; class Variant extends Model{ /*Some code*/ } 在我的route.php中,我有: use App\Variant; /*calls Variant::all() some

我是新来的拉威尔5,我想有人向我解释拉威尔的名字空间是如何工作的

因此,我在
app/models/Variant.php
中有一个名为
Variant
的类,我的代码如下所示

namespace App;
use Illuminate\Database\Eloquent\Model;
class Variant extends Model{
  /*Some code*/
}
在我的
route.php
中,我有:

use App\Variant;
/*calls Variant::all() some where in code*/
然后我得到一个错误,说
变量
未定义。但是,如果我将
Variant.php
中的命名空间从
namespace App
更改为
namespace App\Models
,并将
route.php
中的命名空间从
use App\Variant
更改为
use App\Models\Variant
,一切都会神奇地工作


为什么呢?它是否与php名称空间或composer.json中的
classmap
属性有关?我很困惑

您的类可能是由composer加载的。它的具体内容是什么-
自动加载
部分

我猜它是按标准加载的,这尊重控制器名\文件名模式

意思是:

  • App\Variant
    App/Variant.php
  • App\Models\Variant
    App/Models/Variant.php

因此,当您将名称空间更改为与目录路径对应的名称空间时,它会起作用。

如果文件是
app/models/Variant.php
,则名称空间将是
app\models
use
将是
app\models\Variant
。为什么您认为它应该是
App
App\Variant
?请参阅laravel的自动加载工作原理