usuwanie klasy z niej samej

pyt Q

On Feb 16, 6:28 pm, Jacek Sołtysik ScriptKid pisze:


pisze: Jest też sporo ludzi, którzy na liczby mówią cyfry nie tylko dla programisty. () Chyba już trochę za dużo napisano o tej pomyłce, czy skrócie Dołożę od siebie, że kiedy się programowanie OBIEKTOWE (a nie 'klasowe' właśnie!) rodziło, obiektami nazywano tak definicję (późniejszą 'klasę'), jak i same konkretne zmienne tego typu (teraz: obiekty, albo instancje klasy). Mnie się wydaje, że w tym kontekście tak dla autora, jak i dla wszystkich bioracych udział w dyskusji to rozróżnienie jest jasne, i ciagnięcie tego dalej zakrawa na czepialstwo czy wojnę ortograficzną. Szkoda czasu, lepiej się skupić na pytaniu, i to głownie do Jacka Sołtysika: Czy są sytuacje, w których 'samobójstwa' klasy są potrzebne? To nie jest wcale banalne, ani podchwytliwe pytanie. Całkiem możliwe, że on na coś takiego trafił, a Wy się skupiacie na rozdmuchiwaniu różnic w słowniku, zniechecając do samego tematu Ale, jak rozumiem, łatwiej jest POUCZAĆ, niż się czegoś NAUCZYĆ, prawda? ScriptKid łamię swój własny eot, ale to pierwsza wypowiedź gdzie z góry nie zakłada się, że autorzy php są nieomylni.
czy są sytuacje gdzie unset jest potrzebny - są, jedną właśnie przedstawiłem oczywiście można to obejść dłuższym kodem, ale to chyba nie o to chodzi. Co niektórzy pisali, że sam sobie robię problem, ale ja dostałem zlecenie napisania klasy działające tak a nie inaczej i gó*** mnie obchodzi, że ktoś na grupie uważa że jest to problem wydumany, bo ja nie napisze przy oddawaniu projektu, że nie jest on zrobiony tak jak było zamówione bo uznałem że jest to głupie.
Dobrze rozumiem? Wziales projekt, ktory zaklada dzialanie niezgodne ze specyfika jezyka? I teraz twierdzisz, ze to PHP sie idiotycznie obsluguje obiektowke - inaczej niz myslales?
No ale jak już raz pisałem autorzy php i parę osób na grupie uważa się za mądrzejszych niż ludzie z komitetu C++, w którymś jakoś usuwanie obiektu z niego samego działa.
Szkoda, ze nie zauwazyles [tez tego co juz pisalem], ze C++ operuje na pamieci, po usunieciu powstaja smieci pod innymi wskaznikami, a w Javie zrezygnowano z takiej obslugi pamieci wlasnie z tego powodu, ze potrzebne obiekty byly usuwane bez sensu. pakalk pisze:
to jak ma działać ten projekt napisałem już w odpowiedzi na post ScriptKida i nie będę się powtarzał, nie ma tam nic nie zgodnego ze specyfikacja języka.
Co do obsługi obiektówki w PHP, to ja zawsze myślałem, że najpierw określasz co chcesz zrobić i potem dobierasz sposób implementacji, ale teraz widzę, że byłem w błędzie, bo autorzy php najpierw wybrali sposób implementacji a teraz mówią, że nie da się używać unset($this)
j/w autorzy php dobrali funkcjonalność do implementacji, widać teraz tak się robi, może za stary już jestem na programowanie.
po drugie jeśli mamy: $bar = new foo(); unset($bar);
to unset($this) w foo mogłoby działać dokładnie tak samo, czyli niszczyć obiekt jak i zmienną wskazującą na obiekt.

odp A

po drugie jesli mamy: $bar = new foo(); unset($bar);
to unset($this) w foo mogłoby działać dokładnie tak samo, czyli niszczyć obiekt jak i zmienną wskazującą na obiekt.
[]
tylko, ze unset($bar) usuwa nazwe $bar, zmniejsza licznik referencji, i jesli nie ma juz zadnej referencji, to dopiero niszczy wartosc jesli zrbisz: $bar=new foo(); $baz=$bar; unset($bar); to nie zostanie zniszczony obiekt, a tylko nazwa bar. i to nie jest wymysl PHP, tak zachowuje sie bardzo wiele jezykow C++ jest wyjatkiem, pradowpodobnie dlatego, iz jest kompilowany, nie ma GC zreszta niszczenie obiektu ze srodka najwyzej zwalnia obszar pamieci zajmowany przez obiekt, nie sa zerowane wszyskie wskazniki nan wskazujace
jestes absulutnie pewien, ze musisz niszczyc obiekt, gdy sa jeszcze nan referencje? jesli nie potrafisz wyjasnic koniecznisci, to nie jestes pewny :p

odp A

i to nie jest wymysl PHP, tak zachowuje sie bardzo wiele jezykow C++ jest wyjatkiem, pradowpodobnie dlatego, iz jest kompilowany, nie ma GC Jordan Szubert pisze:
To, że jest kompilowany nie ma nic do rzeczy. Reszta pewnie się zgadza.
artur

odp A

Klasa ma wyglądać tak: - Po wywołaniu funkcji usun() są możliwe dwie sytuacje: 1. Funkcja mówi, że jeszcze nie można usunąć obiektu i nic się nie dzieje. Aha i jeszcze jedno bardzo ważne - nie da się fizycznie zrobić tak, żeby sprawdzić czy obiekt można usunąć i nie robić operacji które "psują" obiekt. []
Tutaj nie masz sprzeczności?
W miarę prostym rozwiązaniem będzie przygotowanie klasy-wrappera i przeciążenie w niej wszystkich odwołań. W przeciążonych odwołaniach możesz wtedy sprawdzać stan faktycznej klasy i w razie potrzeby rzucać stosownymi wyjątkami.
Oczywiście usun() dajesz do wrappera, nie klasy macierzystej.
Na unset( $this ) język, jak pewnie zauważyłeś, nie pozwala.
pozdrawiam,

Dodaj odpowiedź

Tytuł:

Mail: (w celu weryfikacji posta)