OOP mit PHP5 - Praxistutorial 1 - Konstruktor und Destruktor der Db-Klasse
1. Die Abschnitte
- Einführung
- Konstruktor und Destruktor der Db-Klasse
- Konstruktor der Db_Request-Klasse
- Der erste Zugriff
- SQL-Fehler abfangen
- Zusätzliche SQL-Methoden
- Die Auswertungsschicht
- Abfragen
- Zusammenfassung
2. Die Klasse Db
Diesmal gehen wir ein wenig anders vor. Wie ich schon sagte, ist das hier auch noch nicht optimal, aber dazu komme ich später bei den
Design Patterns und PDO. Also zunächst mal werden die Zugangsdaten hart verdrahtet. Was es mit $connection
und
$resource
auf sich hat, erkläre ich peu à peu.
class Db
{
private $connection;
public $resource;
private $host = 'localhost';
private $user = 'root';
private $password = '';
private $database = 'php_oop';
}
3. Der Konstruktor
Im Gegensatz zum dritten Einstiegstutorial wollen wir die Klasse Db
diesmal nicht an eine andere weiter vererben. Das hat
natürlich seine Vor- und Nachteile. Aber man sollte die Abhängigkeiten so gering wie möglich halten. Und da eine Datenbankklasse etwas
sehr Allgemeines ist, sollte man hier noch nicht mit der Vererbung anfangen. Denn sonst wird das zu kompliziert und man verliert schnell
den Überblick. Ist zumindest meine Meinung. Darum werden auch alle Methoden dieser Klasse als public
deklariert! Details
dazu folgen in der Zusammenfassung.
class Db
{
...
public function __construct ()
{
$this -> connection = mysql_connect ($this -> host,
$this -> user, $this -> password);
if (is_resource ($this -> connection))
{
mysql_select_db ($this -> database);
if (mysql_error())
{
throw new Db_Exception ('Select Db:'.mysql_error());
}
}
else
{
throw new Db_Exception ('Db->__construct():'.mysql_error());
}
}
}
Erläuterung
Mit mysql_connect ($this -> host, $this -> user, $this -> password);
bauen wir eine Verbindung zum MySQL-Server auf.
Wenn das geklappt hat, so liegt die Ressourcenkennung in der Eigenschaft $this -> connection
. Und jetzt werdet ihr auch
verstehen, warum wir das Error Reporting herunter geschraubt haben. Denn wenn die Verbindung nicht zu Stande kommt, so wird ein
Warning ausgegeben.
Dann prüfen wir (if (is_resource ($this -> connection))
), ob es sich tatsächlich um eine Ressource handelt. Wenn dem nicht
so ist, so werfen wir eine Ausnahme mit throw new Db_Exception ("Db->__construct():".mysql_error());
.
Ansonsten wählen wir die entsprechende Datenbank aus (mysql_select_db ($this -> database);
) und schauen nach, ob sie uns
eine Fehlermeldung zurückliefert. Wenn wir da wieder Mist gebaut haben, so werfen wir erneut eine Meldung mittels if
(mysql_error())
.
Für die Merkbefreiten
Wenn die Verbindung zu einem MySQL-Server fehlschlägt, so gibt PHP ein Warning aus. Wenn man dagegen "nur" eine nicht existierende
Datenbank auswählt, so kann man den Fehler nur über mysql_error()
abfangen. Capice!
4. Der Destruktor
Also dazu sage ich jetzt nichts mehr.
public function __destruct ()
{
if (is_resource ($this -> connection))
{
mysql_close ($this -> connection);
}
}
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt