HTMLWorld - HTML, CSS, JavaScript, PHP, Java, Flash und vieles mehrHTMLWorld:   Home | Impressum |
 

 
 

Anzeige 
 
               Forum
 
 
HTMLWorld » PHP » Klassen und Objekte

PHP: Klassen und Objekte

von Andre Fritzsche

Die objektorientierte Programmierung ist heutzutage kaum noch wegzudenken.
Dieses Kapitel beschäftigt sich nur mit den Grundzügen der Objektorientierung und auch nur für PHP , da alles andere den Rahmen sprengen würde.

Anzeige

Grundlegendes  nach oben

Objekte und Klassen sind prinzipiell das gleiche, nur das Klassen den Typ beschreiben und Objekte die Implementierung sind, so wie Integer ein Datentyp und $a eine Variable vom Typ Integer ist. Klassentypen werden mit dem Schlüsselwort class definiert.

class Klasse  //hier Definition der Klasse
{    
 ...klassenelemente...
}

$Objekt = new Klasse();
//und hier die Implementation (erzeugtes Objekt)

Im Prinzip ist ein Objekt eine Sammlung von Variablen (in der Objektorientierung Felder genannt) mit eigenen Zugriffsfunktionen, den sogenannten Methoden.

Konstruktor  nach oben

Über das Schlüsselwort new wird eine neue Instanz einer Klasse angelegt und ein sogenannter Konstruktor aufgerufen. Dieser ist nichts weiter als eine Funktion, die zur Initialisierung der Variablen, den sogenannten Feldern der Klasse verwendet wird. Der Konstruktor wird als function deklariert und muss den gleichen Namen wie die Klasse erhalten.

class Klasse 
{
  function Klasse($name) { echo "$name erzeugt!\n"; }
}

$objekt=new Klasse("Objekt"); 
//Ausgabe: 'Objekt erzeugt!'

Destruktor  nach oben

Ein Destruktor ist eine Funktion des Objekts die automatisch bei dessen Zerstörung aufgerufen wird. Leider sind diese wie in C++ oder ObjektPascal in PHP noch nicht umgesetzt.

this  nach oben

Das Schlüsselwort $this wird innerhalb von Objekten als Zeiger auf sich selbst verwendet. Damit PHP erkennen kann, ob ein Funktionsaufruf oder Variable dem Objekt selbst oder etwas außerhalb gelten muss diesen das Schlüsselwort $this vorangestellt werden.

$name="Name global";

class Klasse 
{
  function Klasse($newname) { $this->name=$newname; }
}
$objekt=new Klasse("Name Objekt");
echo $objekt->name; //gibt $name des Objekt's aus
echo $name;         //gibt globale $name aus

Methoden  nach oben

Methoden sind die internen Funktionen eines Objekts und dienen eigentlich zum Zugriff und zur Manipulation der Felder.

class Kreis 
{
  var $radius=2;
  function Kreis($radius) { $this->radius=$radius; }
  function flaeche() { return pow($this->radius,2)*pi(); }
  function umfang() { return pi() * $this->radius; }
}

$kreis=new Kreis(4); 
//erzeugt neues Objekt mit Radius 4

echo $kreis->flaeche(); 
//berechnet die Kreisfläche und gibt diese aus

echo $kreis->umfang();  
//berechnet den Umfang des Kreises und gibt diesen aus

Eigenschaften und Felder  nach oben

PHP stellt in seiner Objektorientierung nicht wirklich Eigenschaften und Felder dar, sie werden durch bereichsabhängige Variablen simuliert.

class Kreis 
{
  var $radius=2;
  function Kreis($radius) 
  {
    $this->radius=$radius;
    $this->flaeche=pi()*$radius*$radius;
  }
}

Man kann in PHP die Felder eines Objekts auf zwei verschiedene Arten deklarieren. Die erste ist das Setzen der Variablen mittels des Schlüsselworts var im Klassenblock. Die zweite ist das Deklarieren der Variable im Konstruktor, allerdings sollte hier das Schlüsselwort $this davor nicht vergessen werden. Der einzige Unterschied zwischen den beiden Wegen ist der, dass bei der Deklaration im Objektblock (ausserhalb des Konstruktors) keine Ausdrücke zugewiesen werden können. Das geht nur innerhalb des Konstruktors.

Vererbung / Ableitung  nach oben

Eine Elternklasse kann ihre Methoden und Felder an eine sogenannt abgeleitete Klasse "vererben". Das bedeutet, dass eine abgeleitet Klasse neben ihren eigenen Methoden und Feldern auch die der Elternklasse besitzen. Ableitungen von Klassen werden mit dem Schlüsselwort extends gekennzeichnet.

class Kreis //Elternklasse

  var $radius;
  function Kreis($r) { $this->radius=$r; }
  function flaeche() { return pow($this->radius,2)*pi(); }
}

class Zylinder extends Kreis //Kindklasse von Kreis

  var $hoehe;
  function Zylinder($r,$h) 
  {
    $this->radius=$r;
    $this->hoehe=$h;  
  }
  function volumen() 
  {
    return $this->flaeche()*$this->hoehe; 
    //Aufruf der Methode flaeche() aus der Elternklasse
  }
}

$kreis=new Kreis(4); 
//Kreisobjekt mit Radius 4 erzeugen

echo $kreis->flaeche(),"\n"; 
//gibt die Fläche des Kreises aus

$zylinder=new Zylinder(2,5); 
//Zylinder mit Hoehe 5 und Radius 2 erzeugen

echo $zylinder->flaeche(),"\n"; 
//gibt Grundfläche des Zylinders aus

echo $zylinder->volumen(),"\n"; 
//gibt Volumen des Zylinders aus

In diesem Beispiel wird eine Klasse namens Kreis mit einem Feld $radius und einer Methode flaeche() zur Berechnung der Fläche definiert. Dann wird eine weitere Klasse mit dem Namen Zylinder definiert, wobei diese durch das Schlüsselwort extends von der Klasse Kreis abgeleitet wird und ein weiteres Feld $hoehe sowie eine Methode volumen() erhält. Trotz der Tatsache, dass wir in der Klasse Zylinder keine Methode flaeche() und kein Feld $radius definiert haben, können wir trotzdem auf diese zugreifen und erhalten sogar das korrekte Ergebnis!

Zugriff auf Elternklassen  nach oben

Wird in einer Kindklasse eine Methode deklariert, die den Namen einer Methode der Elternklasse hat, so wird diese "überschrieben". Um in diesem Fall trotzdem noch auf die Implementation der ererbten Methoden zugreifen zu können, gibt man den Namen der Elternklasse gefolgt von zwei Doppelpunkten :: und dem Methoden- oder Feldbezeichner an.

class Mutter 
{
  var $name="Mutter";
  function get_name() 
  { echo "Mutternklasse: ",$this->name,"\n"; }
}

class Kind extends Mutter 
{
  var $name="Kind";
  function get_name() 
  {
    Mutter::get_name();
    echo "Kindklasse: ",$this->name,"\n";
  }
}

$kind=new Kind();
$kind->get_name();
unset($kind);

Hier kann man gut erkennen, das sowohl die Methode get_name() der Klasse Mutter als auch die der Klasse Kind auf das selbe Feld zugreifen, beides aber unterschiedliche Methoden sind.



« zurück weiter »
Bewerten

 

PHP

.Autor:Jan Winkler.
. Bewertung:
PHP: Klassen und Objekte HTMLWorld
(5/5 bei 1 Votes)
.
. Community: 586 Beiträge im PHP Forum .

Navigation


 
     
 

Anzeige