witam,

mam problem z obiektami. sprawa wyglada tak: mam obiekty pkUser i pkSession, klasa session jest klasą statyczną. w klasie user konstruktor pobiera instancje klasy session, kontener parametrow usera (z klasy session), natomiast destruktor tworzy nowy kontener z nowymi zmiennymi user i wywoluje na obiekcie session metode setContainer, ktora zapisuje do qwewnetrznej tablicy kontener. destruktor klasy session zapisuje wszystkie kontenery do $_SESSION.

klasy okreojone wygladają tak (wklejam najwazniejsze czesci):
  1. <?php
  2. class pkUser implements User {
  3.  
  4. const SESSION_CONTAINER_NAME = 'pkUser';
  5.  
  6. private $objSession = null;
  7.  
  8. public function __construct()
  9. {
  10. sleep(1);
  11. Util::dump('user - kontructor, '.time() );
  12.  $this->objSession = pkSession::getInstance();
  13. $arrTemp = $this->objSession->getContainer( self::SESSION_CONTAINER_NAME );
  14.  
  15.  (......)
  16.  }
  17.  
  18.  public function __destruct()
  19. {
  20.  (......)
  21. $this->objSession->setContainer( self::SESSION_CONTAINER_NAME, $arrTemp );
  22. sleep(1);
  23. Util::dump('user - destructor, '.time() );
  24. }
  25. }
  26.  
  27. class pkSession {
  28.  
  29. /**
  30.  * instancja obiektu pkSession
  31.  *
  32.  * @staticvar 
  33.  * @var pkSession
  34.  */
  35. private static $objInstance = null;
  36.  
  37. public function __construct() {
  38. sleep(1);
  39. Util::dump('session - konstruktor, '.time() );
  40.  
  41. (...........)
  42. }
  43.  
  44. public static function getInstance()
  45. {
  46. if ( self::$objInstance === null ) {
  47. self::$objInstance = new pkSession();
  48. }
  49. return self::$objInstance;
  50. }
  51.  
  52. public function setContainer( $strContainer, $arrValues )
  53. {
  54. (...............)
  55.  
  56. sleep(1);
  57. Util::dump('session - setcontainer, '.time() );
  58.  
  59. }
  60.  
  61. public function __destruct()
  62. {
  63. (...................)
  64.  
  65. sleep(1);
  66. Util::dump('session - destruktor, '.time() );
  67. }
  68. }
  69. ?>

Util::dump() to po prostu nakladka na funkcje var_dump wzieta z zend_framework, w miejscu (.........) cos sie wykonuje. w kazdej metodzie daje sleep na sekunde oraz wyswietlam nazwe klasy, nazwe metody oraz czas wywolania. i jak sie okazuje wywolania metod wygladaja tak:
Kod
string(33) "session - konstruktor, 1157985390"

string(29) "user - kontructor, 1157985391"

string(34) "session - getContainer, 1157985392"

string(32) "session - destruktor, 1157985393"

string(34) "session - setcontainer, 1157985394"

string(29) "user - destructor, 1157985395"

czy ktos wie czemu destruktor klas session wywolywany jest przed wywolaniem metody setcontainer (wywolywanej z destruktora klasy user na wewnetrznej instancji obiektu klasy session)? dodam jeszcze ze jesli nie trzymam w klasie user obiektu session tylko zamiest $this->objSession->metoda() odwoluje sie do pkSession->getInstance()->metoda() nic jesli chodzi o kolejnosc nie zmienia sie...