if ($unit instanceof Cavalry) { throw new UnitException("Can't get a horse on the vehicle"); } parent::addUnit($unit); } function bombardStrength() { return 0; } } // end previous code class Army extends CompositeUnit { function bombardStrength() { $ret = 0; foreach ($this->units() as $unit) { $ret += $unit->bombardStrength(); } return $ret; } } $main_army = new Army(); $main_army->addUnit(new Archer()); $main_army->addUnit(new LaserCanonUnit()); $sub_army = new Army(); $sub_army->addUnit(new Cavalry()); $main_army->addUnit($sub_army); $main_army->addUnit(new Cavalry()); print $main_army->textDump();