在PHP类的内部和外部使用use语句导入特征

时间:2018-07-12 14:59:06

标签: php laravel traits

为什么我们应该使用use语句在类外部导入特征,然后在类内部再次使用??!

示例(在Laravel用户模型中):

use Illuminate\Database\Eloquent\SoftDeletes;


class User extends Authenticatable
{

    use SoftDeletes;
.
.
.
.
.

}

为什么特质与其他类不同,我们只在类外导入名称空间并可以直接使用它,为什么呢?!

3 个答案:

答案 0 :(得分:1)

使用类外部使用名称空间包含实际类。因此,它只是包含在内,但尚未在该类中使用。

如果您确实需要在类中使用该类,则需要在类中使用它。

您可以按照以下方式在课堂外省略使用。

  

使用Illuminate \ Database \ Eloquent \ SoftDeletes;

直接在班级内部。

答案 1 :(得分:1)

因为第一个use指示要使用的类,该类已由自动加载器要求。这有助于防止具有相同名称的类发生冲突。

例如

// same name but avoid collision by an alias
use App\Models\Request as RequestModel;
use Request;

第二种用法绑定到Trait,并指示应在此类中使用它。您可以(不好的做法)在1个文件中定义多个类,这就是为什么需要显示要在该特定类上使用Trait的原因。

// test.php
class A {
    use SomeTrait;
}

class B {
   /// not using Trait
}

答案 2 :(得分:1)

use关键字在每种情况下都有不同的含义。

  • 在班级内部确定班级使用See的特征。
  • 在闭包use中,用于确定要导入范围See内的变量。
  • 最重要的是,use导入类的名称空间以使用该名称映射类名称,也可以结合使用useas See来设置别名。 。