我最近注意到在某些情况下我真正喜欢做的事情(调用 super)是一种反模式。(http://en.wikipedia.org/wiki/Call_super)
所以我的问题是:
如何做以下事情(我们大多数人需要的基本事情,为对象添加一些细节)。我只是将一个新元素添加到一个保存在对象 var 中的数组中:
<?php
class A {
// bla bla bla
public function __construct() {
$this->_data['newDetail'] = "Ipiicaei";
}
}
class B extends A {
// bla bla bla
// Override constructor, I need to add one more detail for this class
public function __construct() {
parent::__construct();
$this->_data['newDetailSubcls'] = "Something";
}
}
现在......如果我不调用父类构造函数来添加第一个元素,我有两种可能性:
在每个子类中添加父类通常正在执行的代码部分,并将其从父类中删除。因此,如果我用 999 个类扩展它,我将在父级中复制 999*行。对我来说听起来很糟糕。
从父级调用在子级中实现的方法(模板方法模式,他们推荐的)。因此,如果我只需要一个类来添加它,而其余 998 个类的行为与父类完全相同,那么我在每个类中添加一个空函数。这对我来说也听起来很糟糕。
请记住,我的示例很简单(示例应该是这样的),但是父类和/或子类可能会做复杂的事情。
我可以看到在某些情况下调用 super 可能不好的原因。但在这个对我来说似乎还可以。
那么......你会如何接近?忽略调用 super 是一种反模式并像我一样做(或者如果结果证明我的方式不好,习惯做)?或者……如何?