首页 > 解决方案 > “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;
    }
}

标签: phplaravel

解决方案


parent是一个 PHP 关键字,用于调用类的属性或方法。

所以parent::__construct($model)会调用__construct父类的方法(BaseRepository这里)。

当扩展一个类时,有时需要调用父构造函数,比方说,父类也在初始化一些需要的属性。无需在子类构造函数中初始化它们,您只需调用父类构造函数并将必要的参数传递给它。

现在在您的问题中,this->model = $model;子构造函数(构造函数 in CategoryRepository)中并不真正需要它,因为它在调用时已经被初始化parent::__construct($model)并且可以在子类中访问。

this->model = $model;$model如果inBaseRepository是一个private属性,实际上将是必要的。CategoryRepository那么即使调用了父构造函数,它在子类中也将不可用。


推荐阅读