Hauptmenü

Untermenü

OOP PHP5 - Unterschiede - Statische Methoden und Eigenschaften

1. Einführung

Bisher haben wir nur mit "normalen" Klassen, Eigenschaften und Methoden zu tun gehabt. Allerdings bietet uns PHP mittlerweile etliche Möglichkeiten, diese Dinge zu verfeinern. Zum einen hängt das mit der Modellierung einer Anwendung zusammen und zum anderen mit bestimmten Situationen, die sich daraus ergeben können. Ist im Moment noch ein wenig unverständlich, aber ich hoffe, dass sich das bald erledigt.

2. Besonderheiten

Statische Eigenschaften und Methoden bewegen sich außerhalb des eigentlichen Objektkontextes. Das heißt, dass man nicht über ein abgeleitetes Objekt darauf zugreift, sondern zum Beispiel über den Klassennamen und dem berühmten Paramy-Dings-Irgendwas, also dem Doppel-Doppelpunkt. Zu den Feinheiten komme ich gleich.

3. Definition

Sowohl bei den Eigenschaften als auch Methoden setzt man ein static, um sie als solche festzulegen. Dabei spielt es keine Rolle, ob man das vor die Sichtbarkeitsstufe stellt oder danach. Es sind also folgende Möglichkeiten denkbar. Ich persönlich bevorzuge aber eindeutig die erste Schreibweise! Ich bin es einfach gewöhnt, dass die Sichtbarkeit, wie sonst auch, am Anfang steht. Bei der zweiten Variante krieg ich immer die Krise. Ist nur meine persönliche Meinung.


class Mensch
{
  public static $geschlecht;
  public static function setName($value) { ... }
}
class Mensch
{
  static public $geschlecht;
  static public function setName($value) { ... }
}

4. Zugriffsmöglichkeiten

Das hängt von der Sichtbarkeit ab. Wenn man public nimmt, so geschieht das normalerweise über Klassenname::Eigenschaft/Methode().


class Mensch
{
  public static $geschlecht;
  public static function setName($value) { ... }
}
Mensch::$geschlecht 'Mann';
Mensch::setName ('Peter');

Ansonsten gibt es noch self und parent. Ersteres nimmt man, wenn man in der eigenen Klasse auf eine statische Eigenschaft oder Methode zugreift, Letzteres bei Elternklassen.


class Mensch
{
  private static $geschlecht;
  protected static function setzGeschlecht($value) 
  { 
    self::$geschlecht $value;
  }
}
class Mann extends Mensch
{
  public function __construct($geschlecht)
  {
    parent::setzGeschlecht ($geschlecht);
  }
}
$dieter = new Mann('männlich');

Ein Hinweis

self und parent müssen nicht zwingend genommen werden. Man hätte in diesem Beispiel auch problemlos mit Mensch::setzGeschlecht ($geschlecht); und Mensch::$geschlecht = $value; arbeiten können. Trotzdem sollte man so nicht arbeiten, da self und parent schlichtweg die Lesbarkeit erhöhen.

5. Aber!

Das oben gezeigte Beispiel ist völliger Tinnef. Warum? Nun, setzt mal ein print_r($dieter); und schaut euch das Ergebnis an. Da steht ein läppisches Mann Object ( ). Denn an diesem Beispiel könnt ihr sehr schön sehen, dass sich statische Eigenschaften und Methoden außerhalb des Objektkontextes befinden. Und da muss man ein paar Dinge beachten

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