<?php
interface Band {
public function getName();
public function getGenre();
public function addMusician();
public function getMusicians();
}
interface Musician {
public function addInstrument();
public function getInstruments();
public function assignToBand();
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("główny 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 obiektów
$band = new RockBand("Czerwone Zmienne");
$bandMemberA = new Guitarist("Michał", "Zmiennoprzecinkowy");
$bandMemberB = new LeadGuitarist("Grzegorz", "Całkowity");
$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 grającym " . $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>"; }
}
?>
Nie rozumiem dlaczego zwraca mi taki błąd: Fatal error: Declaration of Guitarist::addInstrument() must be compatible with that of Musician::addInstrument() in /srv/http/ksiazka/1.php on line 23.
Jeżeli nie macie nic do powiedzenia, to nie odpisujcie, nie chce żadnych komentarzy pomyśl, popatrz na 11 i 42 linijke, nie oczekuje tego. Chciałbym po prostu dowiedzieć się gdzie i co jest źle i jak to naprawić, będę bardzo wdzięczny.
Ten post edytował cojack 14.05.2009, 12:55:49