Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Tworzenie obiektu kontra metody statyczne
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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.

Ten post edytował J4r0d 25.12.2006, 00:03:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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.
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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

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: 24.08.2025 - 18:16