Mam potrzebę resetowania obiektu w pewnych okolicznościach i wymyśliłem taki prostacki sposób, który polega na podmianie wartosci $this nowa instancja biezacej klasy. Jak się można było spodziewać to nie działa.
  1. <?php
  2. class ClassName
  3. {
  4. public function __construct() {
  5. // tresc konstruktora
  6. }
  7.  
  8. /* rozne metody zmieniajace stan obiektu */
  9.  
  10. public function reset() {
  11. $sClassName = get_class($this);
  12. $this = new $sClassName();
  13. }
  14. }
  15. ?>


Moze znacie jakis prosty sposob na rozwiazanie tego problemu bez koniecznosci "recznego" przywracania wszystkich poczatkowych wartosci obiektu. Chodzi mi oczywiscie o to aby reset wywolywany byl poprzez jedna z metod danego obiektu.

-- edit --
Ok wymyslilem. Trzeba tylko tresc zawarta w konstruktorze przeniesc do osobnej metody inicjalizujacej.

  1. <?php
  2. class ClassName
  3. {
  4. public function __construct() {
  5. $this->_init();
  6. }
  7.  
  8. protected function _init() {
  9. /* przypisanie wartosci domyslnych wlasciwosciom obiektu */
  10. }
  11.  
  12. /* rozne metody zmieniajace stan obiektu */
  13.  
  14. public function reset() {
  15. $aProperties = get_object_vars($this);
  16. foreach ($aProperties as $sProperty => $mValue) {
  17. $this->$sProperty = null;
  18. }
  19. $this->_init();
  20. }
  21. }
  22. ?>