在 Laravel 的不同上下文中使用“use”关键字背后的概念是什么?

Bra*_*Prb 1 php oop namespaces laravel laravel-5

我有两个关于在 php(laravel) 中使用“use”关键字的疑问。

以下是 laravel 文档中的代码摘录:

use App\Flight;

$flights = App\Flight::all();

foreach ($flights as $flight) {
    echo $flight->name;
}
Run Code Online (Sandbox Code Playgroud)

第 1 行的代码允许我们使用 Flight 模型,第 2 行有一个获取所有记录的语句。因此,在第 2 行中我们不能只说Flight::all();而不是App\Flight::all();。两者都正确吗?它与相对路径和绝对路径相关吗?

第二个查询(与 softDeletes 相关):下面是我的模型之一的代码块:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    protected $fillable = ['title','body'];
}
Run Code Online (Sandbox Code Playgroud)

在第 6 行,使用了以下语句:

use SoftDeletes;
Run Code Online (Sandbox Code Playgroud)

为什么我们再次使用 use 关键字 withsoftDeletes因为我们没有将其与模型一起使用,我们可以这样做:

class Post extends Model
Run Code Online (Sandbox Code Playgroud)

没有以下代码语句:

use Model;
Run Code Online (Sandbox Code Playgroud)

如果是模型。

Asu*_*sur 5

PHP 中的命令use用于导入/别名命名空间 ( docs )。

首先,您需要知道该命令支持三种类型的导入/别名:类、接口和命名空间。

您的第一个示例是类导入:

use App\Flight;

$flights = Flight::all();

foreach ($flights as $flight) {
    echo $flight->name;
}
Run Code Online (Sandbox Code Playgroud)

Flight它基本上导入了在命名空间中找到的类App,所以我们假设该类将像这样开始:

namespace App;

...

class Flight extends Model {...}
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以只导入名称空间并使用其所属的名称空间引用该类:

use App;

$flights = App\Flight::all();

foreach ($flights as $flight) {
    echo $flight->name;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以完全避免导入任何内容并使用绝对引用:

$flights = \App\Flight::all();

foreach ($flights as $flight) {
    echo $flight->name;
}
Run Code Online (Sandbox Code Playgroud)

在您的第二个示例中,SoftDeletes有一个Trait,它类似于类,但仅旨在以一致的方式对功能进行分组(在本例中,是执行软删除所需的所有方法)。

该特征看起来像这样:

namespace Illuminate\Database\Eloquent;

trait SoftDeletes{...}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它遵循与之前相同的逻辑:查看名称空间Illuminate\Database\Eloquent并使用类/特征SoftDeletes,以便我可以引用它。

希望这对您有帮助。