<?php abstract class Unit { abstract public function bombardStrength (); } abstract class CompositeUnit { public function addUnit (Unit $unit) { { $this->units[] = $unit; } return $this; } public function getArmy () { $list; foreach ($this->units as $unit) { $class = get_class($unit); { $units[$class] = 1; } else { $units[$class]++; } } foreach ($this->units as $unit => $number) { $list .= $unit . ' x ' . $number . '<br />'; } return $list; } } class Archer extends Unit { public function bombardStrength () { return 2; } } class Warrior extends Unit { public function bombardStrength () { return 4; } } class Calvary extends Unit { public function bombardStrength () { return 6; } } class Army extends CompositeUnit { public function bombardStrength () { $ret = 0; foreach ($this->units as $unit) { $ret += $unit->bombardStrength(); } return $ret; } } $army = new Army; $army->addUnit(new Archer)->addUnit(new Warrior)->addUnit(new Warrior)->addUnit(new Calvary);
Przy skomplikowaniu wywala mi blad z tytułu. Jak to rozwiazac? Myslalem nad uzyciem __toString ale to chyba nie tego typu problem. Bo tutaj przeciez jest to zwykly tekstowy klucz nie rozumiem gdzie jest blad..
ech, niepotrzebne $this przed tablica mozna zamknac