Klassen und Objekte in PHP
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.
Grundlegendes
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)
Konstruktor
Über das Schlüsselwortnew
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
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
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
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
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;
}
}
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 (außerhalb des Konstruktors) keine Ausdrücke zugewiesen werden können. Das geht nur innerhalb des Konstruktors.
Vererbung / Ableitung
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üsselwortextends
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
$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
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);
get_name()
der Klasse Mutter als auch die der Klasse Kind auf das selbe Feld zugreifen, beides aber unterschiedliche Methoden sind.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ PHP und MySQL
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project