<?php
interface Band {
public function getName();
public function getGenre();
public function addMusician(Musician $musician);
public function getMusicians();
}
interface Musician {
public function addInstrument(Instrument $instrument);
public function getInstruments();
public function assignToBand(Band $band);
public function getMusicianType();
}
interface Instrument {
public function getName();
public function getCategory();
}
class Guitarist implements Musician {
private $last;
private $first;
private $musicianType;
private $instruments;
private $bandReference;
function __construct($first, $last) {
$this->last = $last;
$this->first = $first;
$this->instruments = array(); $this->musicianType = 'gitarzysta';
}
public function getName() {
return $this->first." ".$this->last;
}
public function addInstrument(Instrument $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('glowny gitarzysta');
}
}
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) {
$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 = 'gitary';
}
public function getName() {
return $this->name;
}
public function getCategory() {
return $this->category;
}
}
//Test obiektow
$band = new RockBand("Czerwone Zmienne");
$bandMemberA = new Guitarist("Michal", "Zmiennoprzecinkowy");
$bandMemberB = new LeadGuitarist("Grzegorz", "Calkowity");
$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 "Muzyk ".$musician->getName(). "<br>"; echo "to ".$musician->getMusicianType(). "<br>"; echo "w zespole grajacym ". $musician->getBand()->getGenre() . "<br>"; echo "o nazwie " .$musician->getBand()->getName(). "<br>";
foreach($musician->getInstruments() as $instrument) {
echo "Jego instrument to " . $instrument->getName() . " "; echo "(". $instrument->getCategory() . ")<br>"; }
}
?>