instruments, $instrument); } public function remove(AbstractInstrument & $instrument) { array_pop($this->instruments); } public function hasChildren() { return (bool)(count($this->instruments) > 0); } public function getChild($i) { return $instruments[i]; } public function getDescription() { echo "- one " . $this->getName(); if ($this->hasChildren()) { echo " which includes:
"; foreach($this->instruments as $instrument) { echo "
   -"; $instrument->getDescription(); echo "
"; } } } public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } public function setCategory($category) { $this->category = $category; } public function getCategory() { return $this->category; } } class Guitar extends AbstractInstrument { function __construct($name) { parent::setName($name); parent::setCategory("guitars"); } } class DrumSet extends AbstractInstrument { function __construct($name) { parent::setName($name); parent::setCategory("drums"); } } class SnareDrum extends AbstractInstrument { function __construct($name) { parent::setName($name); parent::setCategory("snare drums"); } } class BaseDrum extends AbstractInstrument { function __construct($name) { parent::setName($name); parent::setCategory("base drums"); } } class Cymbal extends AbstractInstrument { function __construct($name) { parent::setName($name); parent::setCategory("cymbals"); } } $drums = new DrumSet("tama maple set"); $drums->add(new SnareDrum("snare drum")); $drums->add(new BaseDrum("large bass drum")); $cymbals = new Cymbal("zildjian cymbal set"); $cymbals->add(new Cymbal("small crash")); $cymbals->add(new Cymbal("large high hat")); $drums->add($cymbals); $guitar = new Guitar("gibson les paul"); echo "List of Instruments:

"; $drums->getDescription(); $guitar->getDescription(); ?>