OOP mit PHP5 - Einstiegstutorial 3 - Die Abstract-Klasse Teil 1
1. Die Abschnitte
- Einführung
- Die MySQL-Klasse Teil 1
- Die MySQL-Klasse Teil 2
- Die MySQL-Klasse Teil 3
- Die Abstract-Klasse Teil 1
- Die Abstract-Klasse Teil 2
- Nutzung der Klassen
2. Der Konstruktor
Wieso benötigen wir bei dieser Klasse auch ein __construct
? Den hatten wir doch schon in der MySQL.class.php
?
Ganz einfach, weil wir uns in diesem Beispiel ein wenig mit Vererbung beschäftigen. Die MySQL-Klasse hat zwar auch einen Konstruktor,
der aber als protected
gesetzt wurde. Normalerweise wird so ein Konstruktor auch dann automatisch aufgerufen, wenn man
von der Kindklasse ein Objekt erstellt. Aber hier müssen wir ja noch die Zugangsdaten durchschleifen. Die Feinheiten dazu kommen hier
unter Punkt 4.
class AbstractSQL extends MySQL
{
public function __construct ($host, $user, $password, $database)
{
parent::__construct ($host, $user, $password, $database);
}
}
Hinweis
Wir wollen ja in diesem Fall eine "Abstraktionsschicht" in Form einer Klasse bauen, die die Kommunikation zwischen der Datei
tutorial_3.php
und der MySQL.class.php
regelt. Daher rufen wir auch den Konstruktor der MySQL-Klasse
über einen Konstruktor unserer "Abstrakt"-Klasse auf. Und der wird aufgerufen von der tutorial_3.php
.
Erläuterung
parent::__construct
macht nichts anderes als den Konstruktor der Elternklasse aufzurufen. Und der stellt dann die
Verbindung zum MySQL-Server her und wählt die entsprechende Datenbank aus. Und die Zugangsdaten? Das kommt später.
3. Der Destruktor
Im Gegensatz zu den Zugangsdaten im Konstruktor wäre das hier doch eigentlich nicht nötig. Ist es aber (siehe folgenden Punkt).
public function __destruct ()
{
parent::__destruct ();
}
4. Die Sache mit den Sichtbarkeitsstufen
So wie ich etliche von euch kenne, habt ihr euch natürlich nicht die Theorie
durchgelesen. Auch wenn ich mich ungern wiederhole, so mache ich es ausnahmsweise. Wenn eine Elternklasse über einen Konstruktor oder
Destruktor mit der Sichtbarkeit protected
verfügt, die Kindklasse aber nicht, so passiert das hier.
Es wird ein Objekt aus der Kindklasse erzeugt. Da diese über keine der beiden magischen Methoden verfügt, so wird vom Objekt(!) automatisch der Konstruktor/Destruktor der Elternklasse aufgerufen. Und dann knallt es wegen der Sichtbarkeiststufe.
5. Ausnahmebehandlung
Wollen wir auch diesmal einbauen. Und zwar für alle Abfragen, die zwar keine MySQL-Fehlermeldung hervorrufen, trotzdem aber falsch
sein können, da unter Umständen keine Datensätze von Änderungen betroffen sind. Falls noch nicht vorhanden, legt daher mal eine Datei namens
dataexception.class.php
an, packt sie in den class
-Ordner und schreibt da nur folgendes hinein.
<?php
class dataexception extends exception {}
?>
Wichtig!
Diese Datei nirgendwo einbinden, das kommt alles später noch. Da werdet ihr eine kleine Überraschung erleben!
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt