Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Kolejność likwidowania obiektów
ayeo
post 22.11.2007, 23:37:18
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Witam!
W jakiej kolejności likwidowane są obiekty przy kończeniu skryptu i czy da się to kontolować? Chodzi np o problem z klasą sesji. Mianowicie w destruktorze tej klasy nie powinno (nie można) korzystać z obiektów bo są one już zlikwidowane wcześniej niż sesja. Co jeśli destruktor korzysta z klasy bazy danych? Klasa BD jest w sumie Singletonem więc jak co to postawi mi tą klasę od nowa, ale to niepotrzebny narzut. Mogę też dać w destruktorze session_write_close() i poprostu usuwać obiekt Session na końcu każdego skryptu, ale to też mi sie nie podoba. Dziękuję z góry za wszytskie wzkazówki winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
nevt
post 23.11.2007, 01:45:14
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


jeżeli masz z tym problem, to znaczy że źle zaprojektowałeś swoje klasy. jedną z podstawowych reguł programowania obiektowego jest hermetyczność klas - to znaczy, że kod danej klasy nie powinien zależeć od kodu innych klas (o ile nie jest ich implementacją lub rozszerzeniem)
Cytat
Co jeśli destruktor korzysta z klasy bazy danych
to oznacza, że twoja klasa sesji musi posiadać właściwość typu klasy bazy danych - wtedy masz gwarancję, że będzie dostępna zawsze dla wszystkich metod, łacznie z destruktorem. jeżeli z wnętrza swojej klasy sesji potrzebujesz odwoływać się do innych, niezależnych obiektów (tutaj bazy danych), to znaczy że właśnie zapomniałeś o regule hermetyczności.

Ten post edytował nevt 23.11.2007, 01:46:27


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
ayeo
post 23.11.2007, 03:27:39
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Dziekuję za odpowiedź! Sporo mi się wyjaśniło w głowie dzieki Tobie winksmiley.jpg Mam teraz takie pytanie kontrolne, żeby się upewnić czy wszystko dobrze rozumiem. Klasa Session musi korzystać z klasy DataBase! Więc powinienem dodać do klasy Session właściwość $DB = DataBase::getInstance(); tak? Czy to jest zgodne z zasadą hermetyzacji?


--------------------
Go to the top of the page
+Quote Post
nevt
post 23.11.2007, 11:20:30
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


dokładnie - i wtedy masz gwarancję dostępu do bazy przez cały czas życia obiektu sesji.
generalna zasada programowania obiektowego: obiekt składa się z danych (właściwości) i funkcji operujących na tych danych (metod). jeżeli metoda obiektu powinna operować na danych zewnętrznych, to te dane (albo obiekty) należy do niej jawnie przekazywać. np.
  1. <?php
  2. //mamy obiekt a klasy A
  3. $a = new A();
  4. //mamy obiekt b klasy B
  5.  $b = new B();
  6. //i w metodzie 'ustaw' obiektu b potrzebujemy dostać się do obiektu a, to przekazujemu go jawnie:
  7. $b->ustaw($a);
  8. ?>

powodzenia.

Ten post edytował nevt 23.11.2007, 11:21:36


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 21:12