Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Static] Deklarowanie zmiennej static w ciele metody klasy
Nekro
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 3.01.2007
Skąd: Żory

Ostrzeżenie: (0%)
-----


Witam.

Ostatniio natknalem sie na ciekawy kod.

  1. <?php
  2. class ObjectFactory {
  3. //...ciach
  4.  
  5.  public static getInstance($id, $type) {
  6.  
  7.  static $aObjectCache = array()
  8.  
  9. if (array_key_existst($id,$aObjectCache) && $id > 0) {
  10. //ciach..sprawdzanie dodatkowych warunkow
  11. return $aObjectCache[$id];
  12. }
  13. // przetwarzanie i pobieranie obiektu. Wynikeim tych dzialan jest obiekt przypisan
    y do zmiennej $object
  14.  
  15. $aObjectCache[$object->getId()] = $object
  16. return $object;
  17.  }
  18. //...ciach
  19.  
  20. }
  21. ?>


Zastanawiałem sie czemu zmienna $aObjectCache jest zadeklarowana w ciele metody a nie klasy.

Moje obserwacje.
W duzej aplikacji gdzie odwlanie do ObjectFactory::getInstance() jest liczone w setkach wydajnosc tego rozwiazania jest lepsza niz deklaracja statycznej zmiennej w ciele klasy i odwolywanie sie do niej poprzez ObjectFactory::$aObjectCache;
Wszystkie tworzone obiekty sa zapisywane w tej zmiennej statycznej i kolejne odwolanie sie do jakiegos obiektu, ktory wczesniej byl zainiciowany powoduje pobranie go z tablicy $aObjectCache a nie powonwe czytanie z bazy czy ewentualnie z cache.

Jestem ciekaw co o tym mysla forumowicze smile.gif


--------------------
Angielski dla specjalistów: www.anglobiznes.pl
Wydawnictwo językowe: www.eprofess.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
cbagov
post
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


Na moje oko to dbanie np. o oszczednosc pamieci kiedy sprodukujesz 100 obiektow, ktore roznia sie wszystkim oprocz jednej skladowej - jakiejs duzej tablicy itp.
Druga sprawa to mozliwosc odwolania sie do metody/skladowej bez inicjowania obiektu co mozna stosowac roznie, np. do uzyskania indywidualnej przestrzeni dla nazw wlasnych funkcji co pozwoli unikac kolizji z fukcjami innych ludzi z projektu.
Mozna tez po prostu odpalic sobie jakies potrzebne dzialanie przed stworzeniem jakiejkolwiek instancji - czyli uzywac funkcji z obiektu a niby nie z obiektu - inaczej mowiac ponowne wykorzystanie kodu.
Fukcja poza obiektem np. nie moglaby dzialac na nieudostepnionych skladowych obiektu choc robilaby to samo co fukcja wewnetrzna - i bylyby 2 fukcje a nie 1.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 06:34