Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Static] Deklarowanie zmiennej static w ciele metody klasy
Forum PHP.pl > Forum > PHP
Nekro
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
cbagov
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.