OOP mit PHP5 - Praxistutorial 1 - Einführung
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. Das Ziel
Im Gegensatz zum dritten Einstiegstutorial wollen wir diesmal eine halbwegs vernünftige Datenbankklasse aufbauen. Und das auch mit einer sauberen Ausnahmebehandlung und einer darüber liegenden Schicht, die die Anfragen sendet und das Ergebnis entsprechend verarbeitet. Dabei werden wir zu Übungszwecken mal das Error Reporting ziemlich nach unten schrauben. Das ist zwar nicht ganz im Sinne des Erfinders, aber wir machen es (mal wieder) trotzdem. Warum? Erkläre ich gleich.
3. Der Hintergrund
Dazu greife ich mal auf ein Beispiel zurück, das ich für einen ehemaligen Kollegen (Tach Frau Miiiiielke ) programmiert habe. Woher der dämliche Name kommt? Ganz einfach. Er sagte immer zu mir "Guck mal, Frau Tietze". Und da wir beide große Loriot-Fans sind, hat sich das eingebürgert.
Bei besagter Programmierung ging es um Testcases im Rahmen einen Projektes, das auf qooxdoo aufbaute. Da es sich dabei um ein (ziemlich geniales) JavaScript-Framework handelte, mussten alle Anfragen an die Datenbank über Ajax erfolgen. Dabei war das Schema immer dasselbe. Daten suchen, ändern, löschen oder neu eintragen.
4. Die Struktur
Da wie schon gesagt, alles über Ajax laufen sollte, habe ich eine kleine Datenbank-Klasse entwickelt, die von einer übergeordneten Anfrage-Klasse angesteuert wird. Die verarbeitet dann auch die Ausnahmebehandlungen und reicht das Ergebnis weiter durch. Ihr müsst also folgenden Aufbau erstellen.
oop_4.php
-
class
(Ordner)Db.php
(Datei)Db_Exception.php
(Datei)Db_Request.php
(Datei)
Die Datenbank
Rechts unter dem Punkt Daten findet ihr einen SQL-Dump. Einfach entpacken, einspielen und fertig. Vorausgesetzt, ihr habt nicht
schon eine Datenbank namens php_oop
, denn die wird dann gehimmelt.
5. Die Vorgehensweise
Beim oben erwähnten Projekt haben wir JSON-Daten hin und her geschoben. Hier verzichten wir darauf und beschränken uns auf Arrays. Denkt auch bitte daran, dass die Vorgehensweise in diesem Tutorial an die damaligen Notwendigkeiten angepasst wurde. Da ich erst später zu den so genannten Design Patterns und zu PDO kommen werde, ist der Aufbau immer noch nicht ganz optimal. Aber schon besser.
Außerdem
... möchte ich euch noch ein paar grundsätzliche Dinge zeigen, auf die ich bisher nicht eingegangen bin. Speziell was Konstruktoren und Destruktoren angeht, wenn man ohne Vererbung arbeitet.
6. Vorarbeiten
// oop_4.php
<?php
error_reporting (E_ERROR | E_PARSE);
function __autoload($class)
{
require 'class/'.$class.'.php';
}
?>
// DB.php
<?php
class DB
{
}
?>
// Db_Request.php
<?php
class Db_Request
{
}
?>
// Db_Exception.php
<?php
class Db_Exception extends Exception {}
?>
error_reporting
Da unser Projekt komplett über Ajax lief, mussten wir natürlich bestimmte Fehlermeldungen unterdrücken, da uns sonst schon bei Warnings alles um die Ohren geflogen wäre. Warum? Weil das die Datenstruktur zerstörte hätte, die wir an das Ajax-Script zurückgegeben haben. Wie ich schon sagte, ist das in anderen Fällen nicht so prickelnd, aber wir wollen diesmal alle möglichen Fehler (Parse Errors und Fatal Errors ausgenommen) in einem Array zurückgeben und dann darauf reagieren.
__autoload
Im Gegensatz zum vorherigen Tutorial war ich ein wenig schreibfaul und habe das .class
bei den Dateinamen weggelassen.
Wie __autoload
funktioniert habe ich euch ja schon vorher gezeigt.