Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wielka tablica w obiekcie, oszczednosc zasobow
bigZbig
post
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.
  1. <?php
  2. class klasaPrzykladowa
  3. {
  4. private $duzaTablica = array();
  5. protected $pojedynczaWartosc;
  6.  
  7. public function __construct() {
  8. //ta tablica jest sporych rozmiarow
  9. $this->duzaTablica = array('cos1', 'cos2', '...', 'cosX');
  10. }
  11.  
  12. public function cosSieDzieje($x) {
  13. //w zaleznosci od $x cos sie dzieje 
  14. //pojawia sie zmienna $y
  15. $this->pojedynczaWartosc = $this->duzaTablica[$y];
  16. }
  17. }
  18.  
  19. ?>

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.

  1. <?php
  2.  
  3. //ta tablica jest sporych rozmiarow
  4. $duzaTablica = array('cos1', 'cos2', '...', 'cosX');
  5.  
  6. class klasaPrzykladowa
  7. {
  8. protected $pojedynczaWartosc;
  9.  
  10. public function cosSieDzieje($x) {
  11. //w zaleznosci od $x cos sie dzieje 
  12. //pojawia sie zmienna $y
  13. $this->pojedynczaWartosc = $GLOBALS['duzaTablica'][$y];
  14. }
  15. }
  16. ?>

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Radarek
post
Post #2





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) .
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.12.2025 - 05:06