![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem z referencjami , z którymi nie mogę sobie poradzć (PHP 5.4). Napisałem sobie klasę cache'ującą, która zbiera referencje do pewnych obiektów i trzyma je w odpowiedniej strukturze. W przypadku, gdy pojawiają się w niej referencje do tego samego obiektu zaczynają się schodki, które wydają się być błędem związanym z PHP niż z moją klasą. Zobrazuję to w poniższym przykładzie.
I teraz tak , jeżęli zmienię jakaś składową, np:
Po czym wyświetlę stan kontenera - obiekt key1 i key2 mają x ustawione na 10 - w końcu to ten sam obiekt. Teraz chcę zamiast tego usunąć zawartość tej refrencji, robię więc:
Odczytuje dane i.... Tylko obietk spod key2 jest nullem. Obiekt spod key1 został niezmieniony. Problemem okazuje się być funkcja pobierająca miejsce, wk tórym ma być wpisany obiekt. Gdy wpisuję do kontenera ręcznie wartość:
Wszystko działa w porządku. Jednak, gdy robię to pobierająć dokładne miejsce w kontenerze za pomocą funkcji:
Co robię źle? Co robię źle? Ten post edytował Skie 21.10.2013, 23:44:24 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Link do manuala podałem, ponieważ widzę jak ciągle używasz referencji przy obiektach (co właściwie nie ma sensu) i dziwisz się, że usunięcie obiektu z kontenera nie powoduje jego usunięcia z innych miejsc. Obiekty w PHP przekazywane są przez coś na kształt niejawnych wskaźników, więc ani nie dochodzi do kopiowania obiektów, ani nie ma użytych żadnych referencji. Ty tworzysz jedynie referencje do "wskaźników". Nie mniej jednak być może słabe referencje są tym czego szukasz.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 05:53 |