如何在子类中设置通用属性?

问题描述

| 我是OO编程的新手,我试图了解如何以适当的方式将值分配给子类的通用属性。我总是每次都会以不同的方式来做,所以我想问问你平时的工作是一个好主意。 假设我有一个父类Fruit,还有两个子类Apple和Banana。     
abstract class Fruit {

    protected $color; //empty property

    protected function getColor(){
        return $this->color;
    }
}

class Apple extends Fruit {
    protected $color = \'red\';
}

class Banana extends Fruit {
    protected $color = \'yellow\';
}

?>
每个子类必须具有属性color,例如,超类中的getColor函数将使用该属性。 但是我该如何处理财产? 我在父级中定义了空变量$ color。然后,在子类中设置变量$ color,然后通过parent :: __ construct将其传递给父级,以将值分配给父级中的属性。 我在父级中定义了空变量$ color。然后,我只是在子类中使用$ this-> color来设置值。 我在每个子类中定义属性,然后像这样保留它。继承的方法仍然可以使用它。 我想认为最好是收集父类中的通用属性,但是写这么多行来设置一些值感觉有点过头(如果我有很多属性,还有很多功能参数)。第二个和第三个有效,但是很难看出我实际上需要定义该属性。 我在这里应该怎么看?我对所有的OO思维方式都感到困惑,以至于我几乎没有编写任何代码,哈哈。 谢谢。     

解决方法

        没有“银色子弹”。通常,应通过构造函数的参数设置所有子类中期望不同的字段,以确保对其进行显式设置。其他字段可以通过将值分配给属性来初始化。 例如,可以通过为属性分配值来设置水果的颜色(因为许多水果可以是红色的),但是名称应由构造函数的参数设置(因为名称唯一地标识了水果)。     ,        您的所有子类都将继承color属性。
protected
关键字将确保它继承给孩子,但不能被外界使用。您不需要在子级中声明
$this->color
,因为它已经存在,您可以在子级中的方法中为
$this->color
赋值。     ,        最好的方式显示在您的清单上-为class属性分配默认值。但是我可能会在代码中利用一些依赖注入的想法,然后将默认值传递给构造函数。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...