Hauptmenü

Untermenü

OOP PHP5 - Grundlagen - Paamayim Nekudotayim

1. #*#?+|~°^* ?????

Paamayim Nekudotayim? Hat der Kerl gesoffen, oder sich auf der Tastatur abgestützt? Oder steht er kurz vor dem Eintritt ins Nirvana? Keine Angst, ich stehe auch nicht unter dem Einfluss von illegalen Halluzinogenen. Ich habe nur das PHP-Handbuch gelesen. Paamayim Nekudotayim ist hebräisch, bedeutet Doppel-Doppelpunkt und wurde von der Firma Zend als Benamung für den so genannten Gültigkeitsoperator auserkoren.

Der wird vor allem bei den so genannten magischen Methoden oder statischen Eigenschaften beziehungsweise Methoden eingesetzt. Da ich darauf aber erst später eingehe, gibt es hier erst mal nur zwei grundsätzliche Verwendungsmöglichkeiten.

2. Konstanten

... werden in einer Klasse immer mit const initialisiert. Das unterscheidet sie vom sonst üblichen define. Nehmen wir mal an, dass Dieter sein romantisches Dinner mit Dörte als Geschäftsessen deklarieren möchte, um Vater Staat zu betuppen. Und dafür benötigt unser Schlingel eine Rechnung, wo die Mehrwertsteuer explizit ausgewiesen ist.

Der Zugriff

... innerhalb einer Klasse erfolgt über das Schlüsselwort self und dem Doppel-Doppelpunkt (self::MwSt).


class Rechnung
{
  const MwSt 0.19;
  public function calculateTax ($bill)
  {
    return $bill self::MwSt;
  }
}
$rechnung = new Rechnung;
echo $rechnung -> calculateTax(120);

Will man dagegen auf die Konstante einer Elternklasse zugreifen, so nimmt man stattdessen parent.


class Steuer
{
  const MwSt 0.19;
}
class Rechnung extends Steuer
{  
  public function calculateTax ($bill)
  {
    return $bill parent::MwSt;
  }
}
$rechnung = new Rechnung;
echo $rechnung -> calculateTax(120);

3. Methodenaufruf

Erinnert ihr euch noch an das Beispiel mit den identischen Methodennamen. Nun, dieses Problem kann man umgehen, indem man die gleichnamige Methode der Elternklasse so ansteuert.


class Mensch
{    
  protected $name;
  protected function setName($value)
  {
    $this -> name $value;
  }
}
class Frau extends Mensch
{
  public function setName($value)
  {
    Mensch::setName($value);
  }
}
$doerte = new Frau;
$doerte -> setName('Dörte');  
print_r($doerte);

Natürlich würde auch ein parent::setName($value); funktionieren. Aber wirklich sauber sind beide Varianten nicht, da man sich außerhalb des eigentlichen Objektkontextes bewegt. Die Details dazu erfahrt ihr später.

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