Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rozpakowanie obiektu do istniejącej instancji klasy, Czy to możliwe?
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


  1. <?php
  2. class Auth
  3. {
  4. private $id;
  5. private $name;
  6. private $surname;
  7. private $groupID;
  8. private $groupName;
  9. public function __construct()
  10. {
  11. // To spowoduje utworzenie NOWEJ instancji klasy Auth
  12. unserialize($_SESSION['AUTH']);
  13. // Tymczasem chcę, aby własności obiektu zostały rozpakowane
  14. // Do bieżącej instancji klasy Auth, czyli $this
  15. }
  16. public function isLoggedIn(){}
  17. public function login($login, $pass)
  18. {
  19. $pdo->query()->fetch(PDO::FETCH_INTO, $this);
  20. //jeśli dane się zgadzają, trzeba zapisać je do sesji
  21. $_SESSION['AUTH'] = serialize($this);
  22. }
  23. }
  24.  
  25. // 1. W pliku index.php tworzę tylko instancję klasy Auth
  26. $auth = new Auth;
  27. // 2. Klasa wykrywa zalogowanego użytkownika sama
  28. // 3. W pliku index.php sprawdzam to tak:
  29. if($auth->isLoggedIn())
  30. {
  31. /* jest OK */
  32. }
  33. else
  34. {
  35. /* musisz zalogować się */
  36. }
  37. // 4. Podstrona logowania ma po prostu wywołać metodę
  38. if($auth->login($login, $pass)) {} else {}
  39. // 5. Metoda login() zapisuje użytkownika w celu ponownego użycia w kolejnych żądaniach
Jak rozpakować obiekt, aby nie tworzyć nowej instancji klasy, lecz uaktualnić istniejącą już instancję? Może jest inny sposób, aby kod działał wg powyższych zasad?


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
irmidjusz
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


źle kombinujesz
spróbuj inaczej, np. metodą statyczną Auth::getInstance()


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Mechanizm (de)serializacji w PHP jest bardzo sztywny i ciężko zmienić sposób jego zachowania. Jednak, w tym przypadku problem leży gdzie indziej. Dlaczego po prostu nie zdeserializujesz obiektu poza obiektem typu Auth? Czemu koniecznie chcesz to robić w konstruktorze?

PS. "Auth" - taka nazwa kompletnie nie oddaje charakteru klasy.
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Hmm a czy __sleep() tutaj nie pomoze? http://php.net/manual/en/oop4.magic-functions.php

Jesli nie to tak jak mowi @crozin serializuj ten obiekt poza klasa wink.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
lukaskolista
post
Post #5





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Singleton - powinno wystarczyc
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@marcio: Auth::__sleep()/__wakeup() zostałoby wykonane na (zde)serializowanym obiekcie, a nie obiekcie wykonującym (de)serializację.
@lukaskolista: Nie dość, że sugerujesz użycie potworka, to w dodatku kompletnie mija się to z celem. wink.gif
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 Aktualny czas: 21.08.2025 - 13:36