试图理解laravel中的“AS”关键字

时间:2017-02-18 20:40:28

标签: php laravel

Laravel框架中的

“AS”关键字

我正在尝试在下面的代码中理解这个关键字“as”。

为什么使用Illuminate \ Contracts \ Auth \ Access \ Gate作为GateContract?

使用Illuminate \ Contracts \ Auth \ Access \ Gate \ GateContract。


    use Illuminate\Contracts\Auth\Access\Gate as GateContract;

    class Gate implements GateContract
    {
        use HandlesAuthorization;

    

2 个答案:

答案 0 :(得分:3)

它的合同已经在命名空间中,因此作者认为它是冗余信息。通常,你只是use Illuminate\Contracts\Auth\Access\Gate;那就是那个。

但是,由于此类名为Gate,因此您需要将导入的类调用为其他类 - 否则,PHP不知道哪个Gate你在代码中调用时引用。对于此特定情况,as将其别名为另一个名称。

这样的命名类是一个好的还是坏的实践本身就是一个主题,不太适合StackOverflow,而且很多人都对此感到惊讶。 :)

答案 1 :(得分:2)

as中的

use关键字用于设置原始类名的别名。

例如:

namespace App\Controller;

use App\Model\Book as BookModel;

class Book
{
    public function add()
    {
        $book = new BookModel();
    }
}

您的控制器类为Book,您的模型为Book$book = new Book();将创建对象Book控制器的实例,而不是Book模型。如果您要创建Book模型的对象,则必须为Book模型添加别名,例如BookModel,然后您可以创建Book模型的对象使用new BookModel()