| |
| * Link führt ins Internet |
|
| |
Verbesserungen des OOP-Konzepts in PHP4
|
|
PHP 4 unterstützt die objektorientierte Programmierung wesentlich besser als PHP 3. PHP 5 geht sogar noch einige Schritte weiter, die Sie im Kapitel 7 kennen lernen werden. Seit PHP 4 können Klassenfunktionen von anderen Klassenfunktionen oder auch aus dem globalen Gültigkeitsbereich heraus aufgerufen werden.
Aufruf einer Klassenfunktion in PHP 4
INSTANZ::KLASSENFUNKTION();
Da es sich bei einem Konstruktor ebenfalls um eine Klassenfunktion handelt, kann eine Subklasse auch den Konstruktor einer Superklasse aufrufen.
Das folgende Beispiel zeigt, wie in der abgeleiteten Klasse Chipsaetze der Konstruktor der Elternklasse Chip aufgerufen wird. Beim Ableiten des Objekts $chipsatz von der Klasse Chipsatz werden somit, wie die Ausgabe demonstriert, die Konstruktoren der Elternklasse und der Kindklasse aufgerufen.
Beispiel
<?php
class Chip
{
function Chip() {
echo "Ich bin ein Chip.<br>";
}
}
class Chipsaetze
{
function Chipsaetze() {
Chip::Chip();
echo "Als Chipsatz können wir noch mehr!<br>";
}
}
$chipsatz = new Chipsaetze;
?>
|
Ausgabe
Ich bin ein Chip.
Als Chipsatz können wir noch mehr!
|
Dass eine Klassenfunktion einer Klasse auch aus dem globalen Gültigkeitsbereich heraus aufgerufen werden kann, zeigt das nächste Beispiel.
Hier wird der Konstruktor der Klasse Chip zum ersten Mal beim Instanzieren der Klasse Chipsaetze und ein zweites Mal ausserhalb eines Klassendefinition, vom Hauptprogramm aus aufgerufen:
<?php
class Chip
{
function Chip() {
echo "Ich bin ein Chip.<br>";
}
}
class Chipsaetze
{
function Chipsaetze() {
Chip::Chip();
echo "Als Chipsatz können wir noch mehr!<br>";
}
}
$chipsatz = new Chipsaetze;
Chip::Chip();
?>
|
Ausgabe
Ich bin ein Chip.
Als Chipsatz können wir noch mehr!
Ich bin ein Chip.
|
Ein weiteres Beispiel zeigt, wie das Überschreiben einer Funktion unter Verwendung der neuen Möglichkeiten effizienter durchgeführt werden kann.
Zunächst wird in der neu definierten Funktion der Kindklasse die entsprechende Funktion der Elternklasse aufgerufen und anschliessend ergänzt. Auf diese Weise kann noch verwendbarer Code der Elternklasse auch beim Überschreiben in der Kinderklasse genutzt werden, wo er lediglich ergänzt werden muss.
Beispiel
<?php
class Chip
{
function Chip() {
echo "Chip wurde produziert.<br>";
}
function produzieren($anzahl) {
$anzahl++;
return($anzahl);
}
}
class Chipsaetze extends Chip
{
function Chipsaetze() {
Chip::Chip();
echo "Chipsatz wurde produziert.<br>";
}
function produzieren($anzahl) {
$anzahl = Chip::produzieren($anzahl);
$anzahl = $anzahl*$anzahl;
return($anzahl);
}
}
$chip1 = new Chip;
echo $chip1->produzieren(100);
echo "<br>";
$chipsatz1 = new Chipsaetze;
echo $chipsatz1->produzieren(100);
?>
|
Ausgabe
Chip wurde produziert.
101
Chip wurde produziert.
Chipsatz wurde produziert.
10201
|
|
|
|
|
|
|
|