Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasy - serialize i unserialize, czyli klasa nie chce wrócić :(
kackoz
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 19.02.2006

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


Ostatnio napisałem sobie taki kod klasy PHP5:
  1. <?php
  2. class Test{
  3.  private $name;
  4.  private $string;
  5.  private $color;
  6.  
  7.  private function writeText($text){
  8. echo "<span style='color:".$this->color."'>".$this->name." : ".$text."<br></span>"; 
  9.  } 
  10.  
  11.  public function __construct($name){
  12. $this->name = $name;
  13. $this->color = "#".dechex(rand(0,90)).dechex(rand(0,255)).dechex(rand(0,255));
  14. $this->writeText("Dziękuje że mnie stworzyłeś!");
  15.  }
  16.  
  17.  public function __destruct(){
  18. $this->writeText("Żegnaj :/");
  19.  }
  20.  
  21.  public function __clone(){
  22. $this->writeText("Ooo! Ja mam klona!");
  23. $this->color = "#".dechex(rand(0,90)).dechex(rand(0,255)).dechex(rand(0,255));
  24.  }
  25.  
  26.  public function __sleep(){
  27. $this->writeText("Ojej! Możesz mnie teraz w pliku schować!");
  28. return $this;
  29.  }
  30.  
  31.  public function __wakeup(){
  32. $this->writeText("Jeee! Przywróciłeś mnie do życia!");
  33.  }
  34.  
  35.  public function rename($newname){
  36. $oldname = $this->name;
  37. $this->name = $newname;
  38. $this->writeText("Ojej zmieniłeś moje imię z ".$oldname." na ".$newname."!");
  39.  }
  40.  
  41.  public function say($text){
  42. $this->writeText($text);
  43.  }
  44.  public function randomColor(){
  45. $this->color = "#".dechex(rand(0,90)).dechex(rand(0,255)).dechex(rand(0,255));
  46. $this->writeText("Zmieniłeś mój kolor!");
  47.  }
  48. }
  49. $tst = new Test("Fanfarikus");
  50. $inny = new Test("Dziwak");
  51. $klon_tst = clone $tst; 
  52. $klon_tst->rename("Klon Fanfarikusa");
  53. $kopia_innego = clone $inny;
  54. $inny->say("Dzięki że mnie sklonowałeś ;)");
  55. $tst->randomColor();
  56. unset($inny);
  57. $tekstowy = serialize($klon_tst);
  58. $klon_tst->say("Hehe! Jestem ciągiem znaków w zmiennej ".'$tekstowy'."! Brzmie tak : ".$tekstowy);
  59. unset($klon_tst);
  60. $klon_tst = unserialize($tekstowy);
  61. print_r($klon_tst);
  62. //$klon_tst->say(":O");
  63. $tst->say(";)");
  64. ?>


Zwraca taki tekst:
Kod
Fanfarikus : Dziękuje że mnie stworzyłeś!
Dziwak : Dziękuje że mnie stworzyłeś!
Fanfarikus : Ooo! Ja mam klona!
Klon Fanfarikusa : Ojej zmieniłeś moje imię z Fanfarikus na Klon Fanfarikusa!
Dziwak : Ooo! Ja mam klona!
Dziwak : Dzięki że mnie sklonowałeś;)
Fanfarikus : Zmieniłeś mój kolor!
Dziwak : Żegnaj :/
Klon Fanfarikusa : Ojej! Możesz mnie teraz w pliku schować!
Klon Fanfarikusa : Hehe! Jestem ciągiem znaków w zmiennej $tekstowy! Brzmie tak : O:4:"Test":3:{s:16:"Klon Fanfarikusa";N;N;s:7:"#4661cb";R:2;}
Klon Fanfarikusa : Żegnaj :/
: Żegnaj :/
Fanfarikus :;)
Fanfarikus : Żegnaj :/
Dziwak : Żegnaj :/


No i jest problem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Jak wywołuje Serialize wszystkie zmienne są w ciągu znaków, ale gdy wywołuje unserialize funkcja __wakeup nie wywołuje się bo zmienna nie jest obiektem. Czy jest jakiś spodób na przywrócenie zserializowanej klasy?
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: 14.09.2025 - 21:19