I have an inheritance issue. Consider I have a parent class A and a derived class B from A and a derived Class C from A again.
Let's say, class B & C both override method seed() from class A. Also clases A & B & C all implement a static function seedAll().
My question is: How do I call seedAll for B & C from the seedAll function of A without explicitly specifying the class B & C, so that in the future, should I have a class D similar to class B & C, I need not modify the seedAll function of class A to call the seedAll functions of classes B, C & 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() . "
";
// }
}
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;
}
}
See how to obtain all subclasses of a class in php for how to get all the subclasses. You can then loop over them and call their seedAll()
methods.
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() . "
";
// }
}
getSubclassesOf function:
function getSubclassesOf($parent) {
$result = array();
foreach (get_declared_classes() as $class) {
if (is_subclass_of($class, $parent))
$result[] = $class;
}
return $result;
}