在PHP类内外使用use语句导入特性

在PHP类内外使用use语句导入特性,php,laravel,traits,Php,Laravel,Traits,为什么我们应该使用use语句在类外导入特征,然后在类内再次使用它 示例(在Laravel用户模型中): 为什么特征的处理方式与其他类不同,我们只需在类外部导入一次名称空间,就可以直接使用它 使用类外来包含使用命名空间的实际类。因此,它只是包含在该类中,但尚未在该类中使用 如果您真的需要在类内使用该类,那么您需要在类内使用该类 您可以通过以下方式省略类外的用法 使用Illumb\Database\Elount\SoftDeletes 直接在类内部。使用类外部包含使用名称空间的实际类。因此,它只是包

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

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


为什么特征的处理方式与其他类不同,我们只需在类外部导入一次名称空间,就可以直接使用它

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

如果您真的需要在类内使用该类,那么您需要在类内使用该类

您可以通过以下方式省略类外的用法

使用Illumb\Database\Elount\SoftDeletes


直接在类内部。

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

如果您真的需要在类内使用该类,那么您需要在类内使用该类

您可以通过以下方式省略类外的用法

使用Illumb\Database\Elount\SoftDeletes


直接进入类内。

,因为第一个
使用
表示自动加载器已经要求使用的类。这有助于防止同名类的冲突

例如

第二个用法绑定到
Trait
,表示应该在这个类中使用它。您可以在一个文件中定义多个类(不好的做法),这就是为什么您需要表明您希望在该特定类上使用Trait

class A {
    use SomeTrait;
}

class B {
   /// not using Trait
}
edit:知道PHP中有三种使用
use
关键字的方法可能会很好,它们都有不同的含义

  • 意思是:当我在下面的类中键入产品时,请使用此全名

  • 方法:加载此类中的SoftDeletes(插入一些函数)

  • 意思是:在具有自己作用域的new中使用变量
    $product
    。没有它,就无法访问函数体中的
    $product
    变量


  • 因为第一个
    use
    表示自动加载器已经需要使用的类。这有助于防止同名类的冲突

    例如

    第二个用法绑定到
    Trait
    ,表示应该在这个类中使用它。您可以在一个文件中定义多个类(不好的做法),这就是为什么您需要表明您希望在该特定类上使用Trait

    class A {
        use SomeTrait;
    }
    
    class B {
       /// not using Trait
    }
    
    edit:知道PHP中有三种使用
    use
    关键字的方法可能会很好,它们都有不同的含义

  • 意思是:当我在下面的类中键入产品时,请使用此全名

  • 方法:加载此类中的SoftDeletes(插入一些函数)

  • 意思是:在具有自己作用域的new中使用变量
    $product
    。没有它,就无法访问函数体中的
    $product
    变量


  • use
    关键字在每个上下文中都有不同的含义

    • 在类内部确定该类使用的特征
    • 在闭包中,
      use
      用于确定要在范围内导入的变量
    • 其中,
      use
      导入一个类的名称空间以映射一个类名,也可以将别名设置为
      use
      as
      的组合

    use
    关键字在每个上下文中都有不同的含义

    • 在类内部确定该类使用的特征
    • 在闭包中,
      use
      用于确定要在范围内导入的变量
    • 其中,
      use
      导入一个类的名称空间以映射一个类名,也可以将别名设置为
      use
      as
      的组合

    为什么要使用“SoftDeletes\SoftDeletes;”在用照明\数据库\雄辩\ SoftDeletes\SoftDeletes;虽然SoftDeletes.php文件直接在Elounce目录中?!更新了我的答案。只是把它粘在一起。为什么特征的处理方式不同于其他类,我们只需在类外导入一次名称空间,就可以直接使用它?!为什么要使用“SoftDeletes\SoftDeletes;”在用Lightning\Database\Eloquent\SoftDeletes\SoftDeletes;虽然SoftDeletes.php文件直接在Elounce目录中?!更新了我的答案。只是把它粘在一起。为什么特征的处理方式不同于其他类,我们只需在类外导入一次名称空间,就可以直接使用它?!为什么特征的处理方式与其他类不同,我们只需在类外部导入一次名称空间,就可以直接使用它?!因为您在代码的某个地方将它们用作类。这个特性已经通过存在而起作用了。我的意思是,一旦我们在newClass之外的newClass文件中导入一个类,我们就可以使用另一个命名空间中的类。我们不需要在newClass内部再次导入它,但需要使用traits导入它两次(在newClass外部和内部)。。为什么?第一次意味着指定以后使用哪个类。第二次你真的将它嵌入到你的类中。@OnlineTomas-如果use语句被移到类外-例如Laravel Http内核-这会影响中间件的行为吗?为什么特征会以不同于其他类的方式处理,我们只需在类外导入名称空间,就可以直接使用它?!因为您在代码的某个地方将它们用作类。这个特性已经通过存在而起作用了。我的意思是,一旦我们在newClass之外的newClass文件中导入一个类,我们就可以使用另一个命名空间中的类。我们不需要在newClass中再次导入它,但需要导入两次(外部和内部)
    class A {
        use SomeTrait;
    }
    
    class B {
       /// not using Trait
    }
    
    use App\Models\Product;
    
    class User
    {
        use SoftDeletes;
    
    collect([])->map(function ($id) use ($product) {
     // function body
    });