Przerabiam sobie wzorzec złożony i znowu mam parę pytań. Tym razem analizując kod, każdy krok zapisywałem na kartce żeby sobie to dobrze wyobrazić. Później postanowiłem przepisać kod i go odpalić. Poniżej zamieszczę kod (pochodzi z ksiązki "PHP5 zaawansowane programowanie" ze strony 94)
<html>
<body>
<?php
abstract class AbstractInstrument {
private $name;
private $category;
private $instruments = array();
public function add(AbstractInstrument $instrument) {
}
public function hasChildren() {
return (bool
)(count($this->instruments) > 0
); }
public function getChild($i) {
return $instruments[$i];
}
public function getDescription() {
echo '- jeden '. $this->getName(); if ($this->hasChildren()) {
foreach ($this->instruments as $instrument) {
echo '<table cellspacing=5 border=0><tr><td> </td><td>-'; $instrument->getDescription();
echo '</td></tr></table>'; }
}
}
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('gitary');
}
}
class DrumSet extends AbstractInstrument {
function __construct($name) {
parent::setName($name);
parent::setCategory('perkusje');
}
}
class SnareDrum extends AbstractInstrument {
function __construct($name) {
parent::setName($name);
parent::setCategory('werble');
}
}
class BaseDrum extends AbstractInstrument {
function __construct($name) {
parent::setName($name);
parent::setCategory('bębny');
}
}
class Cymbal extends AbstractInstrument {
function __construct($name) {
parent::setName($name);
parent::setCategory('talerze');
}
}
$drums = new DrumSet('Zestaw tama maple');
$drums->add(new SnareDrum('Werbel'));
$drums->add(new BaseDrum('Duży bęben'));
$cymbals = new Cymbal('Zestaw talerzy zildian');
$cymbals->add(new Cymbal('Mały talerz'));
$cymbals->add(new Cymbal('Duży talerz'));
$drums->add($cymbals);
$guitar = new Guitar('Gibson les paul');
echo 'Lista instrumentów: <p>'; $drums->getDescription();
$cymbals->getDescription();
$guitar->getDescription();
?>
</body>
</html>
A teraz bardzo Was proszę o przeanalizowanie go ze mną, bo nie wiem czy dobrze łapie.
<?php
1. $drums = new DrumSet('Zestaw tama maple');
2. $drums->add(new SnareDrum('Werbel'));
3. $drums->add(new BaseDrum('Duży bęben'));
?>
Ad 1. Tworzymy instancję klasy DrumSet. Właściwość $name = 'Zestaw tama maple', $category = 'perkusje'
Ad 2. Do tablicy $instruments dodajemy instancję klasy SnareDrum
Ad 3. Do tablicy $instruments dodajemy instancję klasy BaseDrum
Czyli teraz wygląda to tak:
drums$name - Zestaw tamla maple
$category - perkusje
$instruments - [ ($name - werbel, $category - werble), ($name - bęben, $category - bębny) ]
<?php
1. $cymbals = new Cymbal('Zestaw talerzy zildian');
2. $cymbals->add(new Cymbal('Mały talerz'));
3. $cymbals->add(new Cymbal('Duży talerz'));
4. $drums->add($cymbals);
?>
Ad 1. Tworzymy instancję klasy Cymbal. Właściwość $name = 'Zestaw talerzy zilidjian', $category='talerze'
Ad 2. Do tablicy $instruments dodajemy instancję klasy Cymbal
Ad 3. Do tablicy $instruments dodajemy instancję klasy Cymbal
cymbals$name - Zestaw talerzy zilidjian
$category - talerze
$instruments - [ ($name - Maly talerz, $category - talerze), ($name - Duży talerz, $category - talerze) ]
Do tego miejsca rozumiem. Ale za cholere nie mogę pojąć Ad 4. Jak do tablicy $instruments, która przechowuje pary name-category mogę dodać obiekt, który dodatkowo przechowuje kolejną tablicę instruments?