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):
<?php class pkUser implements User { const SESSION_CONTAINER_NAME = 'pkUser'; private $objSession = null; public function __construct() { $this->objSession = pkSession::getInstance(); $arrTemp = $this->objSession->getContainer( self::SESSION_CONTAINER_NAME ); (......) } public function __destruct() { (......) $this->objSession->setContainer( self::SESSION_CONTAINER_NAME, $arrTemp ); } } class pkSession { /** * instancja obiektu pkSession * * @staticvar * @var pkSession */ public function __construct() { (...........) } { if ( self::$objInstance === null ) { self::$objInstance = new pkSession(); } return self::$objInstance; } public function setContainer( $strContainer, $arrValues ) { (...............) } public function __destruct() { (...................) } } ?>
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"
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...