PHP OOP继承问题

时间:2017-06-16 16:03:23

标签: php oop inheritance

我有继承问题。考虑我有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;
        }
    }

1 个答案:

答案 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;
}