[PHP] Elementy statyczne |
[PHP] Elementy statyczne |
8.07.2015, 17:12:08
Post
#1
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 22 Dołączył: 10.02.2015 Ostrzeżenie: (0%) |
Witam,
Pytanie jest bardziej na myślenie niż działanie, dotyczy metod i elementów statycznych. Definicji jest trochę, z grubsza wiem o co chodzi, ale nie natrafiłem jeszcze na jakiś logiczny przykład użycia static w klasie (oprócz wszędzie wymienianego liczenia instancji klasy, gdzie to rzeczywiście może się przydać). Czy programując w OOP jeśli używacie takich elementów, w jakim celu je wykorzystujecie? -------------------- |
|
|
8.07.2015, 17:44:29
Post
#2
|
|
Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) |
Ladnie wyglada ^^.
Klasa::metoda('wartosc'); Poza tym są szybsze od zwyklych metod . Nie mam zadnego praktycznego przykładu. Pozatym nie tworzy obiektu tylko bezposrednio sie odwoluje do danego elementu klasy, więc w takich przypadkach może być przydatne. Także jest przydatne gdy nie musisz uzywac $this bo o ile czegos nie pomylilem, w np. Statycznych metodach $this jest niedostepne. Ten post edytował Ksar 8.07.2015, 17:46:47 -------------------- |
|
|
8.07.2015, 18:23:11
Post
#3
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 22 Dołączył: 10.02.2015 Ostrzeżenie: (0%) |
no szczerze mówiąc to co napisałeś to już wiem
Może wypowie się ktoś kto na co dzień ma z OOP styczność -------------------- |
|
|
9.07.2015, 22:46:37
Post
#4
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 22 Dołączył: 20.07.2010 Ostrzeżenie: (0%) |
Metody statyczne moga byc uzyte do:
1. przechowywania globalnego stanu aplikacji, np. State::$debug = true, nie polecam 2. singletonow - wymuszanie tworzenia i uzywania jednej instancji obiektu danej klasy ( https://github.com/symfony/symfony/blob/2ae...sionGuesser.php ): ::getInstance() - nie polecam, ale bez static nie da sie tego zrobic. 3. tworzenia klas typu Utility, zbioru funkcji ukrytych pod wspolnym namespace, tez nie polecam 4. cacheowania wynikow dzialania metod, np. https://github.com/symfony/symfony/blob/2ae...oneType.php#L63. Metoda TimezoneType::getTimezones uzywa statycznej tablicy $timezones. Po jednokrotnym wywolaniu tej metody kosztowna czasowo operacja bedzie przechowywana w tej zmiennej. Kazde kolejne wywolanie metody zwroci wczesniej utworzony wynik. Co wiecej utworzenie obiektu tej klasy, lub kolejnego obiektu i wywolanie na nim tej metody tez nie bedzie prowadzic do ponownego generowania tej listy. Oczywiscie metody statyczne powinny byc bezstanowe. Wynik ich wywolania powinien byc zalezny tylko od parametrow wejsciowych a nie stanu obiektu. 5. optymalizacja pamieciowa. Atrybuty obiektow sluza do przechowywania danych. Jesli te dane nie zmieniaja sie (jak imie obiektu Osoba), mozna zadeklarowac je jako statyczne, np: https://github.com/symfony/symfony/blob/2ae...sformer.php#L20. Atrybut protected static $formats jest niezmienny, lub zmienny w stosunku do klasy, a nie obiektu. Utworzenie wielu instancji tego obiektu nie bedzie zajmowac pamieci na identyczny atrybut w wielu obiektach. $ cat aa.php
$ cat bb.php
$ php aa.php 291681216 $ php bb.php 259669560 Przy wolaniu metod wielu tysiecy obiektow kilkaset lub wiecej razy w ciagu pojedynczego requestu zaczyna to miec znaczenie. 6. Utrudnieniu sobie zycia przy pisaniu unit testow. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 10:34 |