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)
如果是模型。
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,以便我可以引用它。
希望这对您有帮助。
| 归档时间: |
|
| 查看次数: |
4041 次 |
| 最近记录: |