V. 8.7 (27.03.2012)

Infos

Download

Theorie OOP PHP5

Beispiele

Beispiele

Schnellsuche

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.

weiter zum nächsten Abschnitt