派生类是否覆盖构造函数或外部的父属性?

时间:2015-09-11 22:07:16

标签: php oop

派生类可以通过在属性声明中初始化它们,或者通过在构造函数中设置它们的值来覆盖继承属性的值。结果是相同的。

两种方法之间是否存在语义差异或明显优势? 或者只是可读性和个人偏好的问题?

这是一个(公认的做作)例子来说明两种方式:
IdNumber个对象是专门的Number个对象。除了其他差异之外,它们还设置了一个特定的默认最小值,其中父类不是:

class Number
{
    protected $value;
    protected $minValue;
    public function __construct ($value)
    {
        $this->value = $value;
    }
    public function setMinValue ($min)
    {
        $this->minValue = $min;
    }
    public function isValid ()
    {
        if (isset($this->minValue)) {
            return $this->value >= $this->minValue;
        } else {
            return true;
        }
    }
}

class IdNumberA extends Number
{
    protected $minValue = 1;  //
    /* ...plus more specialized methods... */
}

class IdNumberB extends Number
{
    public function __construct ($value)
    {
        $this->minValue = 1;
        parent::__construct($value);
    }
    /* ...plus more specialized methods... */
}

0 个答案:

没有答案