PHP OOP继承问题
我有继承权问题。考虑到父类A和派生类B从一个派生类C到另一个。 比方说,类B&C都重写了类A中的方法seed()。还将类A&B&C全部实现一个静态函数seedAll() 我的问题是:如何从A的seedAll函数调用B&C的seedAll而不显式指定类B&C,这样将来,如果我有一个类似于类B&C的类D,我就不需要修改类A的seedAll函数来调用类B、C&D的seedAll函数PHP OOP继承问题,php,oop,inheritance,Php,Oop,Inheritance,我有继承权问题。考虑到父类A和派生类B从一个派生类C到另一个。 比方说,类B&C都重写了类A中的方法seed()。还将类A&B&C全部实现一个静态函数seedAll() 我的问题是:如何从A的seedAll函数调用B&C的seedAll而不显式指定类B&C,这样将来,如果我有一个类似于类B&C的类D,我就不需要修改类A的seedAll函数来调用类B、C&D的seedAll函数 abstract class A { public static function 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;
}
}
有关如何获取所有子类的信息,请参见。然后,您可以循环它们并调用它们的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";
// }
}
GetSubassesof函数:
function getSubclassesOf($parent) {
$result = array();
foreach (get_declared_classes() as $class) {
if (is_subclass_of($class, $parent))
$result[] = $class;
}
return $result;
}
如果它取决于调用它的对象,那么它不应该是静态方法。哪个不应该是静态方法,基类的静态方法还是派生类的静态方法?你能更清楚一点吗?
seed()
方法与此有什么关系?你能展示代码吗?你想得到什么结果?@Barmar,我更新了描述并输入了代码。如果你能帮助我,我将不胜感激。这是。没有OOP方法可以做到这一点。一些警告:(1)使用自动加载意味着调用此函数时可能不知道某些类(2)如果OP忘记在任何子类中实现seedAll
,则这将导致无限递归。但是OP要求这样做,所以这是一种“买家小心”的情况。@Barmar我会将您的答案标记为已接受,但我发现GetSubassesof函数不是PHP标准库的一部分。对。这是我链接到的问题。@Barmar非常感谢您的帮助和时间!