![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Mam pewne watpliwosci i chce sie upewnic.
Zalozmy ze klasa korzysta z wlasciwosci ktora jest tablica o ogromnych rozmiarach.
Zalozmy tez, ze w ciagu jednego wywolania strony generuje kilkadziesiat obiektow bedacych instancjami tej wlasnie klasy. Czy kazdy obiekt tej klasy bedzie zawieral kopie tej duzej tablicy? Czy wydzielenie tej tablicy na zewnatrz klasy pozwoli zaoszczedzic zasoby pamieci a jesli tak to czy Waszym zdaniem oplaca sie to przeprowadzic kosztem hermetyzacji.
Wiem ze przyklad jest mocno hipotetyczny ale chodzilo jedynie o zobrazowanie problemu, ktory mnie nurtuje. edit ---------------------- Poprawiono załóżmy i zamieniono global na $GLOBALS Ten post edytował bigZbig 8.02.2006, 17:49:38 |
|
|
|
Post
#2
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
1. Wywal global. Tego powinno się zabronić.
2. Poszukaj informacji o wzorcu Singleton. Rozwiąże to Twój problem. 3. Załóżmy. Tak powinno to wyglądać. Popraw bo po oczach daje. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%)
|
Jesli wszystkie klasy maja zawierac ta sama tablice to nie musisz rezygnowac z hermetyzacji. Poczytaj o slowku kluczowym static w php.
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
@mike_mech Singelton nie rozwiazuje mojego problemu bo ja nie chce miec jednej instancji danej klasy tylko kilkadziesiat roznych obiektow. Kazdy z nich moze miec inna wartosc wlasciwosci $pojedynczaWartosc. Zbior wartosci jakie moze przyjac $pojedynczaWartosc jest ograniczona do elementow przechowywanych w tablicy $duzaTablica.
Problem w tym ze nie wiem co jest bardziej korzystne. Czy przechowywanie zbioru dopuszczalnych wartosci danej wlasnosci wewnatrz obiektu czy poza nim. @Radarek - uprzedziles mnie, ale jesli dopuszczam mozliwosc zmiany tej tablicy to co jest lesze? Ten post edytował bigZbig 8.02.2006, 17:28:16 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%)
|
Myślisz w kategorii tablicy..? Tworzysz taką klasę jak na dole i problem z głowy - masz cały czas referencję i bez problemu "wczytujesz" obiekt w kilku miejscach dzięki singletonowi.
Ten post edytował splatch 8.02.2006, 18:43:07 |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
@splatch - nie odpowiedziales na moje pytanie (tzn. nie wprost), ale rozwiazales moj problem. Dzieki
@mike_mech - jesli to miales na mysli to zwracam honor Ten post edytował bigZbig 8.02.2006, 19:06:26 |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%)
|
Cytat(bigZbig @ 2006-02-08 16:25:31) @Radarek - uprzedziles mnie, ale jesli dopuszczam mozliwosc zmiany tej tablicy to co jest lesze? Pole bedace typu static ma ta wlasnosc ze jest wspolne dla kazdego obiektu klasy. Malo tego. Jest ono dostepne nawet jesli nie utworzyles jeszcze instancji klasy. Czy mozesz zmieniac je? Oczywiscie, ze tak. Wszystkie klasy widza jedna i ta sama zmienna. Jesli zmienisz cos w jednym obiekcie klasy to zmiany beda widoczne w kazdym innym obiekcie tej klasy. Uwazam, ze powinienes uzyc tutaj jednak static (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Dlaczego? Singleton jest dobry jesli dany obiekt ma byc dostepny w wielu miejscach. Tutaj chcesz dostepu w jednym miejscu (klasie), dlatego static bedzie prostsze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Wybor nalezy do ciebie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Cytat(Radarek @ 2006-02-08 20:21:25) Czy mozesz zmieniac je? Oczywiscie, ze tak. Wszystkie klasy widza jedna i ta sama zmienna. Jesli zmienisz cos w jednym obiekcie klasy to zmiany beda widoczne w kazdym innym obiekcie tej klasy. Dlatego waham sie wlasnie czy uzyc static bo mowiac o zmianie mialem na mysli rozne wersje danej tablicy dla roznych obiektow. Jesli zmienie ksztalt tej tabeli przy tworzeniu obiektu nr 3 to nie chce aby to mialo wplyw na obiekt 1 i 2. Obawiam sie ze z tego samego powodu moze nie zadzialac Singleton, ale moze nie do konca rozumiem jego dzialania?Tak czy inaczej zawsze moge jednak uzyc interfejsu Iteratora, obudowac tablice klasa i przekazywac obiekt tej klasy do mojej klasy. Cytat(Radarek @ 2006-02-08 20:21:25) Uwazam, ze powinienes uzyc tutaj jednak static (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Dlaczego? Singleton jest dobry jesli dany obiekt ma byc dostepny w wielu miejscach. Tutaj chcesz dostepu w jednym miejscu (klasie), dlatego static bedzie prostsze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Faktycznie planuje dostep tylko w jednej klasie dlatego jezeli zdecyduje sie na staly zestaw wartosci to uzyje static. |
|
|
|
Post
#9
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
Hmmm, a ja mam pytanie pomocnicze.
Bo ten problem nie do końca jest "z kosmosu" i jednak masz już jakąś potrzebę (tak sądzę) Co w tej tablicay miałoby się znaleść? Do czego chcesz ją stosować? I dlaczego takich obiektów miałoby być tak wiele, a już pomijając to że tak wiele to dlaczego każdy musi kożystać z kopii tablicy, a zmiany mają być niewidoczne w pozostałych tablicach? |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Pracuje nad klasa generujaca gradient. (narazie mam szybki zarys) Jak wiadomo gradient sklada sie z wielu kolorow, a kazdy kolor w moim projekcie to obiekt klasy Color. Obiekt koloru przechowuje jak sie mozna domyslic informacje o kolorze np. jego reprezentacje heksadecymalna, rgb i nazwe. I tu dochodzimy do sedna. Nazwy kolorow i ich odpowiedniki w formacie hex (html) przechowywane sa w tablicy. Tworzac obiekt koloru mozemy jako parametr przekazac kolor w formie skladowych rgb, html lub podajac jego nazwe
Moze ta tablica z nazwami nie jest znow az taka duza, ale kilkadziesiat pozycji w kazdej instancji obiektu Color to rzecz niepotrzebna. Moglbym sie oczywiscie zadowolic polem static jak to juz Radarek mi podpowiedzial, ale ja rozwazam (narazie czysto teoretycznie) mozliwosc definiowania przez urzytkownikow wlasnych tablic kolorow.
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%)
|
No to teraz wytlumacz, czemu chcesz niektore wartosci zmieniac, aby byly widoczne tylko w niektorych klasach?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Chcesz zeby w jednej klasie "red" oznaczalo kolor "ffffff" a w drugiej "red" kolor "000000"?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Chyba kolory powinny byc wspolne dla wszystkich klas?
EDIT: Hm tak jeszcze na szybko (bo do konca nie rozumiem co chcesz osiagnac:) ). Mozesz zrobic jedna duza wspolna tablice (static) dla wsystkich klas (globalne kolory), oraz dodatkowo dodac zwyczajna tablice (nie static), w nim bedziesz trzymac indywidualne kolory (jak mniemam, duzo mniejszej od tej globalnej:)). Jak bedziesz szukac danego koloru to wpierw sprawdzisz czy jest w tej lokalnej (indywidualnej) tablicy, a potem ew. w tej globalnej (static). Ten post edytował Radarek 9.02.2006, 11:45:56 |
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
@Radarek - przyznam sie ze ten pomysl ze zmienianiem ksztaltu tablicy powstal w duzej mierze na potrzeby tej dyskusji na zasadzie co by bylo gdyby. Akurat w przypadku mojej klasy niestandardowe nazwy kolorow to pomysl troszeczke wydumany.
|
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 4.07.2004 Skąd: z neostrady Ostrzeżenie: (0%)
|
Cytat(mike_mech @ 2006-02-09 10:30:36) znaleść? kożystać Offtopicowo się wtrącę: znaleźć, korzystać - ortografie drogi! Nie pisałbym, ale sam wyżej zwróciłeś uwagę (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Edit: LOL, tak się zaczytałem że nie zwróciłem uwagi na datę wątku (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif) Ten post edytował akubiczek 25.04.2006, 22:27:04 |
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%)
|
Akurat ortografia jest aktualna (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
|
![]() ![]() |
|
Aktualny czas: 19.12.2025 - 18:29 |