Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dokładne znaczenie i rozumienie static
szubi95
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 3.06.2012

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


Hey wszystkim! wink.gif

Ostatnio napotkałem na mały problem, a raczej na definicję, którą podyktował nauczyciel na lekcji ^^

Cytat
static - statyczna - składowe statyczne są wspólne dla wszystkich obiektów danej klasy. Jeśli słowem tym zostanie poprzedzona definicja metody lub zmiennej istnieje nawet wtedy, gdy nie został utworzony żaden obiekt danej klasy


Uważam, że składowe statyczne należą tak naprawdę do klasy, a nie do obiektów, a przynajmniej, to właśnie z klasą są bezpośrednio, ściśle związane. Może źle rozumiem(proszę o naprowadzenie), ale przecież wywołanie składowej statycznej z poziomu obiektu jest po prostu głupie(przynajmniej z mojego punktu widzenia). Przecież wywołując składową z poziomu klasy możemy zmienić gdzieś jej wartość, co prowadzi do patologii kiedy będzie ona użyta z poziomu obiektu(mam na myśli, że jedno będzie w jednym miejscu, a drugie w innym i może spowodować błąd). W php o ile się orientuję odwołanie się w taki sposób:

  1. public static zmienna;
  2.  
  3. $a = new Pies();
  4. $a->zmienna;


jest niemożliwe(może czegoś nie wiem), natomiast w javie to działa, ale w eclipsie mam wykrzykniki i podpowiedzi, żeby zmienić z poziomu obiektu na poziom klasy lub też zastosować specjalny "kruczek", czy jakąś tam instrukcję, żeby było poprawnie...

Czy mógłby mi ktoś podpowiedzieć, powiedzieć jak jest dokładnie? Może to są szczegóły(w sumie bez problemów używam tych rzeczy, ale jednak chodzi mi o sposób dokładnego zrozumienia), ale dla mnie imo ważne wink.gif

Z góry dziękuję i pozdrawiam,
szubi
Go to the top of the page
+Quote Post
aniolekx
post
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


programista zrobi tyle na ile mu pozwolisz projektując klasę


  1. class Pies
  2. {
  3. private static $zmienna;
  4. public static $zmienna2;
  5.  
  6. public function setZmienna($value)
  7. {
  8. self::$zmienna = $value;
  9. }
  10.  
  11. public function getZmienna()
  12. {
  13. return self::$zmienna;
  14. }
  15.  
  16. public static function test()
  17. {
  18. return self::$zmienna;
  19. }
  20. }
  21.  
  22. $pies = new Pies();
  23. $pies->setZmienna('bark!');
  24.  
  25. echo $pies->getZmienna();
  26. echo $pies->test();
  27. echo Pies::test();
  28.  
  29. /* Error: Cannot access private property */
  30. echo Pies::$zmienna;
  31.  
  32. /* Error: Accessing static property Pies::$zmienna as non static */
  33. $pies->zmienna2;


Ten post edytował aniolekx 30.10.2014, 10:55:20
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Twoje rozumowanie jest poprawne: elementy statyczne należą do klasy, nie obiektów. To, że są one "wspólne dla wszystkich obiektów danej klasy" to jedynie efekt uboczny.
2. Wywoływanie metod/właściwości statycznych przez obiekty, tj.: $obj->metodaStatyczna() jest głupie, pozbawione sensu i z niewiadomych powodów jednak dopuszczalne - ale to już uroki PHP. wink.gif
Go to the top of the page
+Quote Post
szubi95
post
Post #4





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 3.06.2012

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


No tak, to jest oczywiste. Tak samo jest przecież w singletonie, implementacji wzorca proxy przy łączeniu z bazą jak i każdym innym wykorzystaniu, bo tak jak wspomniałeś to ode mnie zależy jak zaprojektuję klasę. To co napisałeś, to zyskujemy szybkość zmiennej statycznej i prywatność składowej, ok. Mi nie chodzi o zastosowanie odnośnie kodu, a bezpośrednie zrozumienie definicji, ponieważ mam swój pogląd, który przedstawiłem powyżej i nagle ktoś wpaja mi inny bez żadnej argumentacji. Dlatego moje pytanko bardziej tyczy się sposobu rozumienia, nie bezpośredniego użycia w kodzie wink.gif

Tak, czy siak dziękuję za zainteresowanie tematem aniolekx wink.gif

Bardzo Ci Crozin dziękuję. O taką odpowiedź mi właśnie chodziło wink.gif

Pozdrawiam,
szubi
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: 20.08.2025 - 12:35