我有继承问题。考虑我有A的父类A和派生类B,再次从A得到派生类C.
比方说,B级& C都覆盖了A类的方法seed()。另外还有A& A B& C都实现了一个静态函数seedAll()。
我的问题是:如何为B& amp;来自A的seedAll函数的C没有明确指定B类和B类。 C,所以在将来,我应该有一个类似于B类和B类的D类。 C,我不需要修改类A的seedAll函数来调用类B,C和C的seedAll函数。 d。
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;
}
}
答案 0 :(得分:2)
有关如何获取所有子类的信息,请参阅how to obtain all subclasses of a class in php。然后,您可以循环遍历它们并调用它们的seedAll()
方法。
abstract class A
{
public static function seedAll() {
$subclasses = getSubclassesOf("A");
foreach ($subclasses as $class) {
$class::seedAll();
}
}
abstract protected function seed();
// // Common method
// public function printOut() {
// print $this->getValue() . "\n";
// }
}
getSubclassesOf函数:
function getSubclassesOf($parent) {
$result = array();
foreach (get_declared_classes() as $class) {
if (is_subclass_of($class, $parent))
$result[] = $class;
}
return $result;
}