Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:dbklasse:start [09.06.2021 19:00] – [Modellierung - fällt aus] sbel | faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:dbklasse:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Verbindung zur Datenbank: Eine Datenbankklasse ====== | ||
- | |||
- | ===== Objektorientiertes PHP ===== | ||
- | |||
- | Anders als Java erzwingt PHP nicht, dass der Anwender objekorientiert programmiert, | ||
- | |||
- | <code php> | ||
- | class syntax_plugin_projekt extends DokuWiki_Syntax_Plugin | ||
- | { | ||
- | [...] | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Datenbank-Klasse ===== | ||
- | |||
- | Wir lagern nun den Zugriff auf die mysql-Datenbank in eine eigene Klasse aus. | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Erstelle eine Datei '' | ||
- | |||
- | <code php mysqldb.php> | ||
- | <?php | ||
- | |||
- | class mysqldb { | ||
- | |||
- | /** | ||
- | * Constructor: | ||
- | * | ||
- | * @param string | ||
- | * @param string | ||
- | * @param string | ||
- | * @param string | ||
- | * | ||
- | * @return object | ||
- | */ | ||
- | function mysqldb($dbusername, | ||
- | |||
- | try { | ||
- | $pdo = new PDO(" | ||
- | $pdo-> | ||
- | |||
- | } catch ( PDOException $e ) { | ||
- | echo ' | ||
- | return FALSE; | ||
- | } | ||
- | |||
- | return $pdo; | ||
- | |||
- | } | ||
- | } | ||
- | |||
- | ?> | ||
- | |||
- | </ | ||
- | |||
- | Wenn man ein neues '' | ||
- | |||
- | Damit wir mysqldb-Objekte (und später vielleicht weitere Objekte) nutzen können müssen uns klar machen, wer in unserem Plugin die Rolle der " | ||
- | |||
- | {{ : | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A2) === | ||
- | |||
- | Binde im Kopf der Datei '' | ||
- | |||
- | <code php> | ||
- | [...] | ||
- | // must be run within Dokuwiki | ||
- | if (!defined(' | ||
- | die(); | ||
- | } | ||
- | |||
- | // Klassendateien einbinden | ||
- | require(" | ||
- | |||
- | class syntax_plugin_projekt extends DokuWiki_Syntax_Plugin | ||
- | { | ||
- | [...] | ||
- | </ | ||
- | |||
- | * Ergänze innerhalb der '' | ||
- | * Mache dir klar, welche Funktion das dabei erzeugte Objekt '' | ||
- | * Teste, was passiert, wenn du eine falsches Benutzer/ | ||
- | |||
- | < | ||
- | $dbhandle = new mysqldb(" | ||
- | </ | ||
- | |||
- | ==== Plugin-Konfiguration ==== | ||
- | |||
- | Sehr unschön ist jetzt natürlich, dass die datenbank Credentials im Quelltext des Plugins stehen - auf diese Weise kann man ein solches Plugin schlecht veröffentlichen oder weitergeben. Wesentlich sind hier 2 Implikationen: | ||
- | |||
- | - Das kollidiert massiv mit der Versionsverwaltung: | ||
- | - Wenn ein anderer Benutzer in ferner Zukunft das Plugin in seinem eigenen Wiki verwenden möchte, muss dieser, um das Plugin für sich nutzbar zu machen den Quelltext editieren um dort seine eigenen Datenbank ZUgangsdaten einzutragen - das ist aus vielen Gründen Mist, einer ist z.B.: wie das Plugin jetzt auf neue Versionen aktualisiert werden soll, denn dabei würden diese Änderungen ja jedes mal wieder rückgängig gemacht. | ||
- | |||
- | |||
- | |||
- | ==== Modellierung - fällt aus ==== | ||
- | |||
- | Eigentlich sollte man sich an dieser Stelle überlegen, wie man seine Problemstellung (objektorientiert) modellieren möchte, das fällt uns etwas schwer, weil wir noch keine Problemstellung haben. Ein paar Überlegungen kann man an dieser Stelle dennoch anstellen. | ||
- | |||
- | Eine grundlegende Frage könnte z.B. sein, wie man die '' | ||
- | |||
- | Wir entwickeln zunächst weitere Methoden innerhalb unserer mysqldb-Klasse - wenn sich unsere Problemstellung konkretisisert können wir im Zuge eines Code-Refactoring weitere Aufteilungen und Modellierungsschritte vornehmen. | ||