我有两个关于在php(laravel)中使用“use”关键字的问题。
以下是laravel docs的代码摘录:
use App\Flight;
$flights = App\Flight::all();
foreach ($flights as $flight) {
echo $flight->name;
}
第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'];
}
在第6行,使用以下语句:
use SoftDeletes;
为什么我们再次使用带有softDeletes
的use关键字,因为我们没有将它与模型一起使用,只是我们可以这样做:
class Post extends Model
没有以下代码声明:
use Model;
如果是模特。
答案 0 :(得分:3)
PHP中的use
命令用于导入/别名命名空间(docs)。
首先,您需要知道此命令支持三种类型的导入/别名:类,接口和命名空间。
您的第一个示例是类导入:
use App\Flight;
$flights = Flight::all();
foreach ($flights as $flight) {
echo $flight->name;
}
它基本上导入在命名空间Flight
中找到的类App
,因此我们假设该类将以这样的方式开始:
namespace App;
...
class Flight extends Model {...}
作为替代方法,您只需导入命名空间并使用它所属的命名空间引用该类:
use App;
$flights = App\Flight::all();
foreach ($flights as $flight) {
echo $flight->name;
}
或者您可以避免导入任何内容并使用绝对引用:
$flights = \App\Flight::all();
foreach ($flights as $flight) {
echo $flight->name;
}
在您的第二个示例中,SoftDeletes
是一个trait,类似于一个类,但仅用于以一致的方式对功能进行分组(在这种情况下,执行软删除所需的所有方法) )。
这个特征看起来像这样:
namespace Illuminate\Database\Eloquent;
trait SoftDeletes{...}
正如您所看到的,它遵循与以前相同的逻辑:查看命名空间Illuminate\Database\Eloquent
并使用class / trait SoftDeletes
,以便我可以引用它。
希望这会对你有所帮助。
答案 1 :(得分:2)
1 - use
用作导入App\Flight
类。以下陈述都是正确的Flight::all()
和\App\Flight::all()
(前面的\
很重要,如果你离开前面的\
,php将从当前命名空间中查找命名空间 - 相对)
2 - use
在Traits
Manual的上下文中使用。 SoftDeletes
是一个特质& Model
是一个班级。