Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z przeniesieniem obiektu klasy w sesji
neverever
post 21.02.2010, 22:14:40
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


Mam sobie obiekt swojej klasy i chce go przekazac w sesji.
Serializuję go, zapisuję w zmiennej sesyjnej ....potem deserializuję przy wczytywaniu z sesji.

Było by ok, ale wywala mi błędy gdy chce na takim obiekcie operować.

Dostaję takiego oto warninga
Cytat
Warning: curl_close() expects parameter 1 to be resource, integer given in ping_classs.php on line 231


Zgaduję, że problemem jest zagnieżdżenie obiektów? tego obiektu curla będącego w środku nie przetwarza?

Pytanie, jak temu zaradzić?

Ten post edytował neverever 21.02.2010, 22:17:41


--------------------
neverever
Go to the top of the page
+Quote Post
-=Peter=-
post 21.02.2010, 22:36:41
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Zasobów nie da się serializować, a najwidoczniej w tym obiekcie masz uchwyt curla.

Rozwiązanie to zamykanie zasobu w metodzie serialize (ew. __sleep), a tworzenie go na nowo w metodzie unserialize (ew. __wakeup).

Ten post edytował -=Peter=- 21.02.2010, 22:38:47


--------------------
Go to the top of the page
+Quote Post
neverever
post 21.02.2010, 22:55:29
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


Cytat(-=Peter=- @ 21.02.2010, 23:36:41 ) *
Zasobów nie da się serializować, a najwidoczniej w tym obiekcie masz uchwyt curla.

Rozwiązanie to zamykanie zasobu w metodzie serialize (ew. __sleep), a tworzenie go na nowo w metodzie unserialize (ew. __wakeup).

tak, mam w środku uchwyt curla trzymany public $curl;

Czy mogę prosić o bardziej szczegółowe wyjaśnienie sposobu rozwiązania? Bo niestety niewiele zrozumiałem.

Znaczy uchwytu nie da rady w w żaden sposób przekazać, czy tak? Jedynie zamknąć i otworzyć na nowo?

Ten post edytował neverever 21.02.2010, 22:59:39


--------------------
neverever
Go to the top of the page
+Quote Post
-=Peter=-
post 21.02.2010, 23:04:38
Post #4





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Chodzi o to, że zasobów nie da się serializować, czyli uchwyt curla który jest zewnętrznym natywnym zasobem nie może być zserializowany.

  1.  
  2. class A implements Serializable
  3. {
  4. protected $curl;
  5. public function __construct()
  6. {
  7. $this->curl = curl_init(...);
  8. }
  9.  
  10. //metoda która jest wywoływana, gdy chcesz serializować ten obiekt
  11. public function serialize()
  12. {
  13. echo __METHOD__;
  14. }
  15.  
  16. //metoda wywoływana gdy obiekt jest deserializowany
  17. public function unserialize($data)
  18. {
  19. //odtwarzasz uchwyt curla, gdyż on nie może być serializowany
  20. $this->curl = curl_init(...);
  21. echo __METHOD__;
  22. }
  23. }
  24.  
  25. $obj = new A();
  26. $s = serialize($obj);
  27. $obj2 = unserialize($s);

Cytat
Znaczy uchwytu nie da rady w w żaden sposób przekazać, czy tak? Jedynie zamknąć i otworzyć na nowo?

Tak, tylko nie wiem czy w Twoim przypadku zamknięcie uchwytu będzie dobrym pomysłem, to zależy czy po serializacji w aplikacji jest nadal używany obiekt, który jest serializowany, jeśli nie to możesz to połączenie zamknąć.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 11.06.2024 - 11:11