Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Tworzenie obiektu kontra metody statyczne
Forum PHP.pl > Forum > Przedszkole
Jarod
W ramach ćwiczeń z OOP napisałem sobie prostą klasę Debugger, która umożliwia pobranie czasu generowania strony. Kod wyglądał tak:
  1. <?php
  2. class Debugger
  3. {
  4.  
  5. private $_fTimeStart = null;
  6.  
  7. public function __construct()
  8. {
  9. $sTimeStart = explode(' ', microtime());
  10. $this->_fTimeStart = (float)($sTimeStart[1] + $sTimeStart[0]);
  11. }
  12.  
  13. static function getTimeOfResponse()
  14. {
  15. $sTimeEnd = explode(' ', microtime());
  16.  
  17. return round((float)($sTimeEnd[1] + $sTimeEnd[0]) - $this->_fTimeStart, 4);
  18. }
  19. }
  20. ?>


W pewnym momencie zacząłem zastanawiać się czy nie lepiej byłoby zdefiniować metody jako statyczne, po co tworzyć obiekt.. Więc przerobiłem powyższy kod na taki:
  1. <?php
  2. class Debugger
  3. {
  4.  
  5. static $_fTimeStart = null;
  6.  
  7. static function setTimeOfRequest() 
  8. {
  9. $sTimeStart = explode(' ', microtime());
  10. self::$_fTimeStart = (float)($sTimeStart[1] + $sTimeStart[0]);
  11. }
  12.  
  13. static function getTimeOfResponse()
  14. {
  15. $sTimeEnd = explode(' ', microtime());
  16.  
  17. return round((float)($sTimeEnd[1] + $sTimeEnd[0]) - self::$_fTimeStart, 4);
  18. }
  19. }
  20. ?>


No ale idąc tym tokiem rozumowania, większość albo dużą ilość klas można by tak stworzyć.
W takim razie kiedy tworzyć normalne obiekty a kiedy klasy statyczne? Jak rozróżnić co będzie lepsze/właściwe?


Do moderatora: Pomyliłem dział, proszę przenieść do obiektówki.
Cysiaczek
Używam metod statycznych do:
1. Utworzenia instancji Singletona (rzadko)
2. Dokonania operacji na klasie przed utworzeniem jej instancji (bardzo rzadko)
3. Do upakowania w systemie funkcji, które powinny być, ale z jakichś względów tworzenie dla nich obiektu byłoby bez sensu. (czasami)

Pewnie jeszcze bym coś wynalazł, ale to powinno wystarczyć : )
Myśl obiektami w systemie - nie klasami.

Pozdrawiam.
Jarod
Cytat(Cysiaczek @ 25.12.2006, 10:56:15 ) *
3. Do upakowania w systemie funkcji, które powinny być, ale z jakichś względów tworzenie dla nich obiektu byłoby bez sensu. (czasami)

Właśnie do tego zmierzam. Jak znaleźć ten złoty środek. Prosta klasa, którą przedstawiłem wyżej - można utworzyć obiekt i pobrać czas generowania strony. Można także zrobić to bez tworzenia obiektu, używając funkcji statycznych. Pisząc jakiś system używając tylko obiektów to dobry pomysł, ale ktoś wymyślił w jakimś celu funkcje statyczne, nie po to, żeby pokazać że coś takiego jest ale żeby tego używać. Podpatrując kod jakiejś aplikacji często zastanawiam się dlaczego autor w tym miejscu użył funkcji statycznych, skoro mógł utworzyć obiekt i na odwrót. Dlatego zacząłem się zastanawiać gdzie jest rozgraniczenie - tworzyć obiekt czy funkcja statyczna.. Pisząc to myślę o prostych rzeczach jak powyższy kod, bo zdaję sobie sprawę, że są rzeczy których nie osiągnie się tylko statycznymi funkcjami..
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.