![]() |
![]() |
![]()
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: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
freemp3
Nie do końca mógłbym tak zrobić, bo obiekty które trzymam w klasie mogą być obiektami, zmiennymi lub tablicami. W każdym razie, jeżeli nie znajdę rozwiązania, będę musiał przemyśleć to zaproponowane przez Ciebie. Praktyczny przykład trzymania wskaźnika do jednego i tego samego obiektu pod paroma kluczami , będącymi unikalnymi identyfikatorami jest taki, że przyśpiesza to znacząco wyszukiwanie danych. Przy rozbudowanej stukturze może istnieć potrzeba pobierania danych na wiele sposób. Porównując to do bazy danych, brak możliwośc definiowania wielu kluczy do jednej wartości byłoby ak jakby umożliwić wyszukiwanie rekrodów tylko po ID. Crozin PHP nie do końca przekazuje obiekty jako referencje. Tzn twierdzenie, że tak robi jest nie do końca prawdziwe, bo zachowanie w ten sposób przekazanych obiektów nieraz różni się od oczekiwanego. Nie będę tutaj się rozwodził na ten temat, bo jest pełno rozmów na zagranicznych forach zagłębiająćych się w mechanikę PHP i czy domyślne referencje, rzeczywiście nimi są. Na pewno rpzeczytam o weakref i wieczorem lub jutro napiszę co zrobiłem w kwestii tej klasy. Generalnie mam wrażenie, że za dużo C++ pcham do PHP. Być może ten moduł aplikacji (tj cacheowanie) w ogóle będzie wygodniej napisać w C++ (IMG:style_emoticons/default/smile.gif) Ten post edytował Skie 22.10.2013, 14:27:50 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 11:19 |