last = $last; $this->first = $first; $this->instruments = array(); $this->musicianType = "guitarist"; } public function getName() { return $this->first . " " . $this->last; } public function addInstrument(Instrument $instrument) { array_push($this->instruments, $instrument); } public function getInstruments() { return $this->instruments; } public function getBand() { return $this->$bandReference; } public function assignToBand(Band $band) { $this->$bandReference = $band; } public function getMusicianType() { return $this->musicianType; } public function setMusicianType($musicianType) { $this->musicianType = $musicianType; } } class LeadGuitarist extends Guitarist { function __construct($last, $first) { parent::__construct($last, $first); $this->setMusicianType("lead guitarist"); } } class RockBand implements Band { private $bandName; private $bandGenre; private $musicians; function __construct($bandName) { $this->bandName = $bandName; $this->musicians = array(); $this->bandGenre = "rock"; } public function getName() { return $this->bandName; } public function getGenre(){ return $this->bandGenre; } public function addMusician(Musician $musician){ array_push($this->musicians, $musician); $musician->assignToBand($this); } public function getMusicians() { return $this->musicians; } } class Guitar implements Instrument { private $name; private $category; function __construct($name) { $this->name = $name; $this->category = "guitar"; } public function getName() { return $this->name; } public function getCategory() { return $this->category; } } // Test Objects $band = new RockBand("The Variables"); $bandMemberA = new Guitarist("Jack", "Float"); $bandMemberB = new LeadGuitarist("Jim", "Integer"); $bandMemberA->addInstrument(new Guitar("Gibson Les Paul")); $bandMemberB->addInstrument(new Guitar("Fender Stratocaster")); $bandMemberB->addInstrument(new Guitar("Hondo H-77")); $band->addMusician($bandMemberA); $band->addMusician($bandMemberB); foreach($band->getMusicians() as $musician) { echo "Musician ".$musician->getName() . "
"; echo "is the " . $musician->getMusicianType() . "
"; echo "in the " . $musician->getBand()->getGenre() . " band
"; echo "called " . $musician->getBand()->getName() . "
"; foreach($musician->getInstruments() as $instrument) { echo "And plays the " . $instrument->getName() . " "; echo $instrument->getCategory() . "
"; } echo "

"; } ?>