<?php interface Band { public function getName(); public function addMusician (Musician $musician); ... } interface Musician { public function addInstrument (Instrument $instrument); public function assignToBand(Band $band); ... } interface Instrument { public function getName(); public function getCategory(); ... } class Guitarist implements Musician { ... private $last; private $instruments; ... public function addInstrument(Instrument $instrument) { } ... } ?>
I teraz mam prosbę o wyjaśnienie
1. Wiadomo, że można tworzyć obiekt gdy definicja klasy występuje w kodzie po utworzeniu obiektu (nie ma konieczności napisania definicji funkcji przed jej wywołaniem). Czy nie wyraźniej (bardziej zrozumiale dla osoby, która przejmuje np. jakiś projekt) byłoby napisać te interfejsy w kolejności: Instrument, Musician, Band ?
2. W definicji interfejsów i klasy (które podałem wyżej) nie rozumię pewnej kwestii i prosiłbym osoby, które dobrze znają OOp o wytłumaczenie:
Dlaczego w interfejsie Musician jest
public function addInstrument (Instrument $instrument);
a nie
public function addInstrument ($instrument); ?
Podobnie jest w klasie Guitarist - dlaczego zamiast
public function addInstrument(Instrument $instrument)
nie jest
public function addInstrument(Instrument $instrument) ?