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"

Zgodność z SPL

SPL w php 5.1 nie definiuje interfejsów observer i subject. Definiuje natomiast SplObserver i SplSubject link SplObserver