Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][oop] Samoistne usuwanie obiektu w klasie
deirathe
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


Jak mam klase
  1. <?php
  2. class Session
  3. {
  4. public $vars;
  5. public function __construct()
  6. {
  7.  
  8. }
  9. public function AddNameSpace($name)
  10. {
  11. $this->vars[$name] = new Session_NameSpace();
  12. }
  13. public function __set($name,$var)
  14. {
  15. $this->vars[$name] = $var;
  16. }
  17. public function __get($name)
  18. {
  19. return $this->vars[$name];
  20. }
  21. }
  22. class Session_NameSpace
  23. {
  24. public $vars;
  25. public function __get($name)
  26. {
  27. return $this->vars[$name];
  28. }
  29. public function __set($name,$var)
  30. {
  31. $this->vars[$name] = $var;
  32. }
  33. public function AddNameSpace($name)
  34. {
  35. $this->vars[$name] = new Session_NameSpace();
  36. }
  37. public function Destroy()
  38. {
  39. unset($this);
  40. }
  41. }
  42. $s = new Session();
  43. $s->AddNameSpace("data");
  44. $s->data->AddNameSpace("aa");
  45. $s->data->aa->value = "asasa";
  46. $s->data->aa->value2 = "222222asasa";
  47. $s->data->aa->value3 = "33333asasa";
  48. print_r($s);
  49.  
  50. $s->data->Destroy();
  51. print_r($s);
  52. ?>

po wykonaniu powyższego nadal w obiekcie $s pozostaje mi obiekt typu Session_NameSpace w zmiennej data obiektu Session, istnije mozliwosc zeby klasa sama mogla zniszczyc wlasny obiekt?? Jezeli tak to jak to zrobic bo jak widac unset nie dziala a ja dostaje juz nerwow...

Ten post edytował deirathe 13.08.2008, 12:15:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wrzasq
post
Post #2





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


co prawda to nie bedzie dokladnie to czego szukasz, ale oto pewne obejscie:

  1. <?php
  2. class Session
  3. {
  4. /* ... */
  5. public function AddNameSpace($name)
  6. {
  7. $this->vars[$name] = new Session_NameSpace();
  8. $this->vars[$name]->setParent($this);
  9. }
  10. /* ... */
  11. public function DestroyChild($child)
  12. {
  13. foreach($this->vars as $name => $var)
  14. {
  15. if($var === $child)
  16. {
  17. unset($this->vars[$name]);
  18. }
  19. }
  20. }
  21. /* ... */
  22. }
  23.  
  24. class Session_NameSpace
  25. {
  26. /* ... */
  27. protected $parent;
  28. /* ... */
  29. public function setParent($parent)
  30. {
  31. $this->parent = $parent;
  32. }
  33. /* ... */
  34. public function AddNameSpace($name)
  35. {
  36. $this->vars[$name] = new Session_NameSpace();
  37. $this->vars[$name]->setParent($this);
  38. }
  39. /* ... */
  40. public function Delete()
  41. {
  42. if( isset($this->parent) )
  43. {
  44. $this->parent->DestroyChild($this);
  45. }
  46. }
  47. /* ... */
  48. public function DestroyChild($child)
  49. {
  50. foreach($this->vars as $name => $var)
  51. {
  52. if($var === $child)
  53. {
  54. unset($this->vars[$name]);
  55. }
  56. }
  57. }
  58. /* ... */
  59. }
  60. ?>


na dodatek proponuje ci, zeby klasa Session dziedziczyla po Session_NameSpace. z tego co widze sama sesja rowniez jest kontenerem dla danym w taki sam sposob jak po prostu pojedyncza grupa, ktora realizujesz przez Session_NameSpace.
Go to the top of the page
+Quote Post

Posty w temacie


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: 16.10.2025 - 07:04