Hauptmenü

Untermenü

OOP PHP5 - Statische Methoden und Eigenschaften - Einsatzmöglichkeiten

1. Und nun?

Wenn das mit statischen Eigenschaften und Methoden so komisch ist, wann kann man sie denn nun einsetzen? Nun wenn zwei oder mehr Objekte eine gemeinsame Basis für etwas benötigen. Dazu nehmen wir das folgende Beispiel. Also, Dieter und Dörte treffen sich abends in einer Kneipe, um sich näher kennen zu lernen. Jetzt ist natürlich der Alkoholspiegel von beiden wichtig. Was später die Rechnung angeht, ist es aber unerheblich, wer was getrunken hat, da Dieter als Kavalier der alten Schule alles begleicht.

2. Die Klasse


class Getraenk
{
  private static $rechnung;
  private static $getraenke = array();
  private $promille;
  
  public function bestellen($getraenk$preis$alkohol)
  {
    self::$rechnung   += $preis;
    $this -> promille += $alkohol;
    self::$getraenke[$getraenk] += 1;
  }
  public function getPromille()
  {
    return $this -> promille;
  }
  public static function getRechnung()
  {
    return self::$rechnung;
  }
  public static function getGetraenke()
  {
    return self::$getraenke;
  }
}

Erläuterung

Die Eigenschaften $rechnung und $getraenke werden als static festgelegt, da ihre Werte in diesem Fall nicht personenbezogen sind und nur bei der Rechnung eine Rolle spielen. $promille hat natürlich Auswirkungen auf den Zustand eines Objektes und ist dementsprechend nicht statisch.

Die Methoden selber brauche ich wohl nicht zu erläutern. Gut, man hätte getRechnung und getGetraenke ebenfalls als normale Methoden definieren können. Machen wir aber nicht, da ja nicht nur Dieter damit zu tun haben könnte. Genau so käme zum Beispiel ein Kellner in Frage. Oder am Ende muss Dörte zählen, weil ihr Verehrer sich komplett abgeschossen hat.

3. Die Auswirkungen

... kann man sehr schön bei der Nutzung dieser Klasse sehen.


$dieter = new Getraenk;
$doerte = new Getraenk;
$dieter -> bestellen('Bier'4.50.3);  
$doerte -> bestellen('Wein'8.00.3);  
$dieter -> bestellen('Whiskey'8.50.5);  
$dieter -> bestellen('Bier'4.50.3);  
$dieter -> bestellen('Wodka'7.00.5);  
$dieter -> bestellen('Bier'4.50.3);  
$doerte -> bestellen('Wasser'3.00.0);  
$dieter -> bestellen('Bier'4.50.3);  
$dieter -> bestellen('Wodka'7.00.5);  

echo $dieter -> getPromille().'<br>';
echo $doerte -> getPromille().'<br>';
echo Getraenk::getRechnung().'<br>'print_r (Getraenk::getGetraenke());

Erläuterung

So, Dieter hat sich so richtig die Kante gegeben und ist hackedicht. Dörte dagegen besitzt noch einen klaren Kopf. Aber für die Rechnung ist das unerheblich. Die beläuft sich auf 51,50 für vier Bier, einen Whiskey, einen Wein, 2 Wodka und ein Wasser. Und so in etwa muss man sich die Einsatzmöglichkeiten vorstellen.

4. Ein Hinweis

Im Sinne der objektorientierten Programmierung ist das Beispiel ziemlich unglücklich, da weder Dieter noch Dörte Objekte von Getraenke sind. Eigentlich müsste man einen anderen Weg gehen, aber das wäre hier zu aufwendig. Es geht nur um das Verständnis. Auf die Details gehe ich in einem geplanten Tutorial ein (siehe Roadmap).

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt