php文件中的"use"语句

lma*_*isa 0 php namespaces traits laravel

我是Laravel的初学者,在学习"命名空间"和"使用"语句时,我发现,例如,在Controllers中,当我们第一次编写"use"语句时,它应该在函数内部重复.

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{

    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
Run Code Online (Sandbox Code Playgroud)

为什么这样工作呢?为什么在不重复函数的情况下编写"use"语句就不够了?而且,如果我要创建另一个具有相同命名空间的Controller,我是否应该在那里编写相同的"use"语句?

dec*_*eze 6

usePHP中有两种不同的东西:

  1. 为了别名命名空间的名称,
  2. 将特征应用于类.

将use在命名空间的名称为较短本地的文件别名的顶部.从字面上看,它们的唯一用途就是让你可以DispatchesJobs在这个文件中写入,而不必总是使用完全限定的名称\Illuminate\Foundation\Bus\DispatchesJobs.

use里面的a class将该特性应用于该类.

在这种情况下,您可以省略第一个use为特征别名,并使用其完全限定名称应用它:

namespace App\Http\Controllers;

class Controller extends \Illuminate\Routing\Controller {
    use \Illuminate\Foundation\Bus\DispatchesJobs;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这完全相同,但显然相当冗长.在文件顶部建立一些别名允许您的以下代码更加简洁.