![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
W jaki sposób zaimplementować metody interfejsu Serializable lub metody __sleep, __wakeup w klasie dziedziczącej po ArrayObject, aby zachować zarówno dane przechowywane w obiekcie danej klasy jak i klasy bazowej. Przykład:
W tym przypadku obiekt "b" posiada wartości 'Jeden', 'Dwa', ale składowa "_skladowa" ma wartość null. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 16.03.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ciekawy problem,
Wiadomo, ze w interfejsie Serializable istnieja metody serialize i unserialize. Pytanie tylko jak je zaimplementowac tak aby zachowac dane w obiekcie klasy.
Przeciez wywolanie funkcji serialize() w metodzie serialize interfejsu Serializable powoduje zapetlenie. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nic się nie zapętla, spokojnie
![]() Serializable::serialize() zwraca zserializowane zmienne, który są wtłaczane w zserializowany - ogólny - string obiektu. Serializable::unserialize($data) dostaje ten string (wyciągnięty z tego ogólnego) jako parametr i musisz sam go sobie rozserializować, wyciagnąć interesujące Ciebie dane i wszystko w obiekcie ustawić. Odrobinę się to różni od __sleep() i __wakeup() edit: Zapomniałem zaznaczyć, że dzięki temu nie musisz wcale używać domyślnego formatu serializowania PHP. Możesz własny np. atrybuty po przecinkach. Ten post edytował LBO 14.11.2008, 14:44:47 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 16.03.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Chyba nie chcesz mi powiedziec, ze trzeba serializowac i deserializowac oddzielnie kazde pole/zmeinna w obiekcie?
![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie no, zbierasz je sobie do kupy i zwracasz w metodzie. To jak je sobie zbierzesz to zależy od Ciebie.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Czyli tak?
Wszystkie właściwości obiektu należy ustawiać ręcznie? Nie ma na to innego sposobu? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A zwykłe __sleep i __wakeup być nie może?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie może. Metoda __sleep() zwraca tablicę nazw składowych, które mają być serializowane. Nie ma jawnej składowej w klasie ArrayObject, w której przechowywane są dane. Dostęp jest jedynie przez metodę.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 19:07 |