【问题标题】:"use" statements in php filephp文件中的“使用”语句
【发布时间】:2019-02-12 20:57:03
【问题描述】:

我是 Laravel 的初学者,在学习“命名空间”和“使用”语句时,我发现,例如,在控制器中,当我们第一次编写“使用”语句时,应该在函数内部重复。

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;
}

为什么会这样?为什么只写一次“使用”语句而不在函数中重复是不够的?另外,如果我要创建另一个具有相同命名空间的控制器,我是否也应该在那里编写相同的“使用”语句?

【问题讨论】:

  • 如果你还没有安装 phpstorm,storm 让学习变得简单快捷
  • @TsV 我不会说它对学习有好处——只是对生产力更好,它没有解释它在做什么——它就是这么做的。最好先学习 PHP,然后使用 PHPStorm 等工具
  • @ThisGuyHasTwoThumbs Ctrl + LMB 解释了很多
  • @TsV 它可以做到 - 但并非总是如此,有时代码导航不是完整的路径
  • 它与 Laravel 无关,它基本上是 PHP。 “第一”use 解释为here。 “第二”use 解释为here

标签: php laravel namespaces traits


【解决方案1】:

在类外使用关键字use 只是导入名为trait 的特定部分。

在类中使用关键字use实际上是继承或实现使用trait

【讨论】:

  • 谢谢!所以,如果我要创建一个具有相同命名空间的新控制器(命名空间 App\Http\Controllers;),这个“特征”也会被导入到这个文件中,对吧?
  • @BSCH,命名空间 = 虚拟文件夹,就像你可以拥有 Job\Music\Mp3.php 和 Home\Music\Mp3.php,相同的名称 - 不同的文件夹 - 不同的文件,特征 - 你的代码在另一个代码中直接注入。
【解决方案2】:

PHP中有两个不同的use

  1. alias 命名空间名称,
  2. traits 应用于课程。

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

class 内的use 将该 trait 应用于类。

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

namespace App\Http\Controllers;

class Controller extends \Illuminate\Routing\Controller {
    use \Illuminate\Foundation\Bus\DispatchesJobs;
    ...
}

这完全一样,但显然相当冗长。在文件顶部建立一些别名可以让您的以下代码更简洁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 2012-01-06
    • 1970-01-01
    • 2021-02-11
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多