【问题标题】:What does "parent::__construct($model)" functionality?“parent::__construct($model)”的功能是什么?
【发布时间】:2020-08-15 03:08:30
【问题描述】:

我正在研究一个朋友的项目,我很困惑他为什么在 CategoryRepository.php 中同时使用parent::__construct($model)$this->model = $model。有人可以帮我理解这两者有什么区别吗?

我已经访问过这些链接PHP Codeigniter - parent::__constructA __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;
    }
}

【问题讨论】:

  • 从给出的代码来看没有区别。 $this->model = $model;CategoryRepository 中不需要,因为它是在BaseRepository 中设置的,但不会引起任何问题。

标签: php laravel


【解决方案1】:

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

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

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

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

如果BaseRepository 中的$modelprivate 属性,则this->model = $model; 实际上是必需的。那么即使调用了父构造函数,子类CategoryRepository也将不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2010-10-02
    • 2010-12-08
    • 2014-08-30
    • 2016-06-07
    • 2023-04-03
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多