Kiedy static a kiedy instance

Obejrzałem trochę filmów na youtube.com o programowaniu obiektowym w PHP i jego praktycznym zastosowaniu. Ale nasunęła mi się jedna myśl. W sumie to nie wiem kiedy używać statycznych pól/metod a kiedy instance (zwykłych)? Jest do tego jakieś podejście? Tylko proszę o odpowiedzi inne niż w stylu jak Ci wygodnie :wink:

Odpowiedź jest jedna: to zależy.

Możesz utworzyć klasę statyczną ze statycznymi metodami/polami, ale będzie to traktowane tak jakby była ona czymś w rodzaju przestrzeni nazw, zamkniętego zbioru funkcji itd.

class Engine

{

  static private $pages = array(

    1 => 'index.html'

  );


  static function show($id)

  {

    if (isset(self::$pages[$id]))

      include_once self::$pages[$id];

  }

}

Engine::show(1);

Powyżej jakaś taka prosta ładowarka szablonów. A jeśli stosujesz klasę jako opis rzeczywistości, klasa jest jakimś elementem otaczającego świata, to:

class Gwiazda 

{

  private $nazwa;

  private $magnitudo;


  function __construct($nazwa, $magnitudo) 

  {

    $this->nazwa = $nazwa;

    $this->magnitudo = $magnitudo;

  }


  function opis() 

  {

    echo '[Gwiazda ', $this->nazwa, ' o jasności ', $this->magnitudo, ']';

  }

}

$pewna_gwiazda = new Gwiazda('Syriusz', -8);

$pewna_gwiazda->opis();

Wiadomo, gwiazd na niebie jest dość sporo, każda ma pewne cechy, które ją opisują - i w tym przypadku stosuje się podejście jak wyżej.

Dzięki bardzo. Trochę to rozjaśniło sprawę.