Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasa statyczna
Forum PHP.pl > Forum > Przedszkole
maviozo
Poszukiwałem już czegoś, co może mnie nakierować na sprawę i niejednokrotnie trafiłem na dyskusje dotyczące 'sporu' klasa statyczna<->singleton.
Natomiast nigdzie nie znalazłem oczywistej odpowiedzi na pytanie czym jest klasa statyczna. Na podstawie własnych wniosków wydaje mi się, że klasa statyczna to skrót myślowy, polegający na utworzeniu klasy, której wszystkie metody i zmienne są statyczne (czyli praktycznie wszystko, do czego chcę mieć dostęp przez Klasa::xx, Klasa::xx() musi być poprzedzona słówkiem static) Przykładem takiej klasy może być PDO, jednak nie dotarłem do źródła, na podstawie którego sam doszedłbym do tego, czego mi trzeba winksmiley.jpg W zasadzie pytanie ogranicza się do: czy jest bardziej elegancka metoda zrobienia takiej klasy poza dodawaniem static przy każdej metodzie/zmiennej? (oczywiście poza zmiennymi tymczasowymi w metodach)

Do czego jest mi to potrzebne? Tworzę sobie na przykład dwie klasy, które będą zawsze jednoznaczne (nie będzie dwóch obiektów tego typu) i chcę by obie nawzajem zawsze się widziały. Można używać $GLOBALS, albo global, ale wydaje mi się to ułomne. Można nie stosować klas i nazwy funkcji poprzedzać dodatkowymi nazwami i korzystać z nich w globalnym zasięgu, ale to jest dość prymitywne.
wookieb
PDO nie jest klasą statyczną. Co do pojęcia klasy statycznej masz rację.

http://forum.php.pl/index.php?showtopic=122586&hl=
maviozo
Racja, z tym PDO oczywiście zagalopowałem się. Poza np. PDO::ATTR_ERRMODE i innymi i jakoś tak mi się utrwaliło w głowie i zaćmiło. Tyle, że akurat to trochę co innego ;
Crozin
Klasa statyczna to klasa statyczna, a nie klasa z wszystkimi metodami statycznymi. PHP klas statyczny nie obsługuje.

Przykład z Javy:
  1. public class Main {
  2. public static void main(String[] args) {
  3. OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
  4. innerClass.doSth();
  5. }
  6. }
  7.  
  8. class OuterClass {
  9. public static class InnerClass {
  10. void doSth() {
  11. System.out.println("OuterClass.InnerClass.doSth()");
  12. }
  13. }
  14. }


Edit:
Cytat
Poza np. PDO::ATTR_ERRMODE i innymi i jakoś tak mi się utrwaliło w głowie i zaćmiło.
To jest stała, a stałe mają to do siebie, że są statyczne:
  1. class PDO {
  2. const ATTR_ERRMODE = 4;
  3. }
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.