Poleciałem je przez Reflection::export() i wywnioskowałem, że interfejsy te wyglądają tak:
<?php interface Subject { public function attach(Observer $observer); public function detach(Observer $observer); public function notify(); } interface Observer { public function update(Subject $subject); } ?>
Taki zapis...
<?php public function attach(Observer $observer); ?>
...wymaga aby przesłać argument klasy Observer. Klasy, nie interfejsu. I tutaj pojawia się problem - istnieje interfejs Observer - czyli nie można zdefiniować klasy o takiej samej nazwie - interfejsy i klasy maja tą samą przestrzeń nazw. A więc z tego wynika, że nie da się poprawnie napisać klasy implementującej ten interfejs, bo:
- po pierwsze - typy argumentów w interfejsie muszą się zgadzać z typami zdefiniowanymi w klasie,
- po drugie - typ argumentu to nazwa klasy, a nie interfejsu,
- po trzecie - klasy o nazwie Observer juz nie zdefiniuję, bo istnieje interfejs o takiej nazwie,
- po czwarte - interfejsu nie zmienię, ani nie usunę bo jest wbudowany,
- po piąte - interfejsy te stworzyli chyba po to, żeby z nich korzystać a nie usuwać.
