Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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?
Go to the top of the page
+Quote Post
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()
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 (IMG:style_emoticons/default/wink.gif)
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. (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 22:12