派生类可以通过在属性声明中初始化它们,或者通过在构造函数中设置它们的值来覆盖继承属性的值。结果是相同的。
两种方法之间是否存在语义差异或明显优势? 或者只是可读性和个人偏好的问题?
这是一个(公认的做作)例子来说明两种方式:
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... */
}