Dyskusja:Observer
Z PHPEdia.pl
Mam zastrzezenie co do kodu:
<?php public function detach(Observer $observer) { foreach($this->observers as $value) { if($value === $observer) { // usuwamy tylko i wylacznie referencję! unset($value); // <<<<<<<<<<<<<<<<<<<<<<<< [1] } } }?>
[1] $value staje sie referencja do obiektu obserwowanego w tym miejscu: foreach($this->observers as $value) gdy unsetujemy $value niszczymy tylko referencje, do tego obiektu, a element tablicy $this->observers bedacy referencja do $observera pozostanie.
Poprawny kod
<?php foreach($this->observers as $index => $value) { if($value === $observer) { // usuwamy tylko i wylacznie referencję! unset( $this->observers[ $index ] ); } }?>
Poprawcie mnie jesli sie myle.
-- Drbonzo
język
Mam pewne zastrzeżenia do pewnych zdań w tym artykule, które są według mnie niezbyt jasne. Można co prawda dojść o co w nich chodzi, ale, szczególnie tych mniej zaawansowanych programistów, mogą przyprawią o mały ból głowy.
Kilka przykładów:
"Obserwator to wzorzec projektowy, umożliwiający stworzenie między obiektami zależności jeden-do-wielu."
O co chodzi z zależnościć jeden-do-wielu? Z następnego zdania dowiadujemy się jedynie, że "zależność ta ma na celu automatyczne informowanie wielu obiektów o jakiejś zmianie stanu lub jakimś zdarzeniu."
OK, ale na czym polega ta zależność sama w sobie. Ponadto to drugie zdanie to jedyne wyjaśnienie zasady działałnia obserwatora w całym artykule (nie do kośca, krżtkie i w zasadzie prosztsze wyjaśnienie znajduje się w punkcie Kiedy używać). później zostajemy rzuceni na głębokie wody zaśożeś wzorca i przykładowych implementacji. Przydaśaby się jakieś jaśniejsze wytłumaczenie o co chodzi w tym wzorcu. Nie jest to łatwe, ale możliwe (jak znajdę czas to może samemu mi się uda coś wymyślić).
Kolejne przykłady:
"- obserwatorzy sami odpowiadają za rejestrowanie się u danego obiektu, co zapobiega wprowadzaniu zmian w obiekcie obserwowanym, a jednocześnie pozwala na zachowanie spżjności"
Przede wszystkim chyba powinno być: "rejestrowanie się w danym obiekcie". Poza tym caśe zdanie to niemały wygibas i ciężko zrozumieć o co biega:
"rejestrowanie się u danego obiektu, co zapobiega wprowadzaniu zmian w obiekcie obserwowanym" - czy "dany obiekt" == "obiekt obserwowany"?
"jednocześnie pozwala na zachowanie spżjności" - spżjności czego?
Idziemy dalej: "Aby zachować zgodność kodu z PHP 5.1(gdzie interfejsy odpowiedzialne za wzorzec Obserwatora są domyślnie zdefiniowane w SPL)"
Przydałoby się małe wyjaśnienie, co to jest SPL, albo po prostu napisać: "są dostępne dzięki wbudowanej bibliotece SPL"
