【发布时间】:2017-06-16 16:03:22
【问题描述】:
我有一个继承问题。假设我有一个父类 A 和一个来自 A 的派生类 B 和一个来自 A 的派生类 C。
假设 B 类和 C 类都覆盖了 A 类的方法 seed()。A 类和 B 类和 C 类都实现了一个静态函数 seedAll()。
我的问题是:如何在没有明确指定 B 和 C 类的情况下从 A 的 seedAll 函数调用 B&C 的 seedAll,以便将来我应该有一个类似于 B 和 C 类的 D 类,我不需要修改 A 类的 seedAll 函数来调用 B、C 和 D 类的 seedAll 函数。
abstract class A
{
public static function seedAll() {
//How do I call seedAll of all the derived classes of Seeder?
}
abstract protected function seed();
// // Common method
// public function printOut() {
// print $this->getValue() . "\n";
// }
}
class B extends A
{
private $name;
function __construct($name) {
$this->name = $name;
}
public static function seedAll() {
$seeder1 = new B("name1");
$seeder1 = new B("name2");
}
function seed() {
echo $this->name;
}
}
class C extends A
{
private $name;
function __construct($name) {
$this->name = $name;
}
public static function seedAll() {
$seeder1 = new C("name1");
$seeder1 = new C("name2");
}
function seed() {
echo $this->name;
}
}
【问题讨论】:
-
它不应该是一个静态方法,如果它取决于你从哪个对象调用它。
-
哪个不应该是静态方法,是基类的静态方法还是派生类的静态方法?能说清楚一点吗?
-
seed()方法与此有何关系?你能展示一下代码吗?你想得到什么结果? -
@Barmar,我更新了描述并放了代码。如果你能帮助我重新,我将不胜感激。这个。
-
没有 OOP 方法可以做到这一点。
标签: php oop inheritance