php - “parent::__construct($model)”的功能是什么?
问题描述
我正在研究一个朋友的项目,我很困惑他为什么同时使用parent::__construct($model)
和CategoryRepository.php。有人可以帮我理解这两者有什么区别吗?$this->model = $model
我已经访问过这些链接PHP Codeigniter - parent::__construct , A __construct on an Eloquent Laravel Model但我想要一个与以下代码相关的更具体的答案。
这是CategoryRepository.php的代码
class CategoryRepository extends BaseRepository implements CategoryContract
{
public function __construct(Category $model)
{
parent::__construct($model);
$this->model = $model;
}
}
BaseRepository.php
class BaseRepository implements BaseContract
{
protected $model;
public function __construct(Model $model)
{
$this->model = $model;
}
}
解决方案
parent
是一个 PHP 关键字,用于调用父类的属性或方法。
所以parent::__construct($model)
会调用__construct
父类的方法(BaseRepository
这里)。
当扩展一个类时,有时需要调用父构造函数,比方说,父类也在初始化一些需要的属性。无需在子类构造函数中初始化它们,您只需调用父类构造函数并将必要的参数传递给它。
现在在您的问题中,this->model = $model;
子构造函数(构造函数 in CategoryRepository
)中并不真正需要它,因为它在调用时已经被初始化parent::__construct($model)
并且可以在子类中访问。
this->model = $model;
$model
如果inBaseRepository
是一个private
属性,实际上将是必要的。CategoryRepository
那么即使调用了父构造函数,它在子类中也将不可用。
推荐阅读
- compression - 纹理压缩从 4096 到 512 不损失质量
- c++ - E0312, C2664 尝试将矢量对象作为函数参数传递时出错
- r - 从正态分布生成数字
- amazon-web-services - 如何从关闭的 AWS SES 账户中恢复?
- time-complexity - 如何计算算法的时间复杂度 O(n)?
- laravel - Ionic 4 & Laravel API - 在 http 请求上获得空响应
- javascript - 将数据存储到firebase中的多个参考的最有效方法是什么?
- javascript - NativeScript Vue - 材料设计图标未显示
- vue.js - this.myClick() 在这个 vue js 方法中做了什么,我该如何测试它?
- c++ - 用于向量中结构的 C++ 访问索引或使用引用而不是值