DatabaseObject

  • Die DatabaseObject-Klasse wird verwendet, um aus einem gedachten Datenbank Objekt in ein php Objekt zu generieren.

    1 Erklärung


    Immer dann, wenn man in der Datenbank eine neue Tabelle für ein eigenständiges Objekt angelegt wird, benutzt man die DatabaseObject, um die angefragten Daten zu verarbeiten. Stellen wir uns mal kurz vor, wir möchten ein Shop entwickeln, so würde es sich u.a. anbieten, für die dort angebotenen Produkte eine Vererbung der DatabaseObject Klasse zu benutzen. So hätten wir stets eine Datei, die sich um ein einzelnes Produkt kümmern kann.


    2 Die DatabaseObject Klasse auf GitHub


    Zu finden ist die DatabaseObject Klasse auf GitHub unter diesem Link: https://github.com/WoltLab/WCF…/DatabaseObject.class.php


    3 Aufbau der Datei


    Der Rohaufbau unserer Datei wäre folgender

    PHP: Product.class.php
    <?php
    namespace shop\data\product;
    use wcf\data\DatabaseObject;
    /**
    * Represents a product.
    * Hier würde sich als Kommentar noch anbieten, ein @author, ein @licence und ein @package anzubeieten
    */
    class Product extends DatabaseObject {
    }



    In Zeile 2 legen wir fest, wo der Autoloader des WSC unsere Product.class.php auffinden kann
    In Zeile 3 "binden" wir die DatabaseObject Klasse ein.
    In Zeile 5 bis 8 geben wir den Kommentar für die Klasse an. Was macht die Klasse, wer hat sie erstellt, unter welcher Lizenz steht sie und zu welchem Plugin gehört sie? All dies sollte mindestens an dieser Stelle beantwortet werden.
    In Zeile 9 geben wir den Namen der Klasse an, der gleichzeitig mit dem Namen der Datei übereinstimmen muss. In diesem Fall heißt die Datei "Product.class.php". Gleichzeitig erben wir alle Eigenschaften der DatabaseObject Klasse.


    An dieser Stelle kann unsere Ableitung der DatabaseObject Klasse noch nichts, denn diese weiß nicht, in welcher Tabelle der Datenbank sie ihre Ergebnisse suchen müsste. Aus diesem Grund geben wir den Namen der Datenbank durch die Klassenvariabel $databaseTableName an. Den Primary Key und den dazugehörigen Autoincrement Wert der Datenbank geben wir durch die Klassen Variabel $databaseTableIndexName an.

    PHP: Product.class.php
    /**
    * @see wcf\data\DatabaseObject::$databaseTableName
    */
    protected static $databaseTableName = 'product'; // Unsere Datenbanktabelle heißt in unserem Beispiel shop1_product
    /**
    * @see wcf\data\DatabaseObject::$databaseTableIndexName
    */
    protected static $databaseTableIndexName = 'productID';// Der Primary Key der Tabelle liegt auf dem Feld productID

    Nach der Initialisierung der Variablen $product kann nun auf jedes Datenbankfeld der Tabelle wie in einem Objekt zugegriffen werden. Ist ein Feld nicht definiert, gibt das WSC null zurück.
    Um also eine Tabelle auszulesen, muss man nur noch die Datei durch use einbinden und die Klasse neu initialisieren und schon können wir uns sämtliche SELECT Abfragen sparen. Hinzu kommt, dass wir eigenständige Funktionen definieren können und die durch die DatabaseObject bereits vorgegebenen Funktionen verwenden können.
    Die wohl wichtigste Funktion ist getObjectID(), diese gibt die aktuelle ID des Objektes wieder, die durch $databaseTableIndexName definiert wurde. Jedoch gibt es keine wirklich interessanten weiteren Funktionen, die man in der alltäglichen Arbeit benötigt. Es sei also nur der Vollständigkeitshalber gesagt, dass man sich durch die Funktion getDatabaseTableName() den Namen der Datenbanktabelle, durch getDatabaseTableAlias() den Alias der Datenbank und durch getDatabaseTableIndexName() den Feldnamen auf den der Autiincrement-Wert liegt zurückgeben lassen kann.


    4 Aufruf


    An dieser Stelle hätte unsere Ableitung der DatabaseObject Klasse den kleinstmöglichen Nenner, um lauffähig zu sein. Wichtig zu wissen ist, das beim Aufruf einer Ableitung der DatabaseObject Klasse, diese durch die Übergabe von drei Parametern stattfinden kann

    PHP
    $product = new Product($productID); // Aufruf durch die ID des Objektes
    $product = new Product(null, $row); // Aufruf durch das Ergebnisses einer bereits erfolgten Datenbank Abfrage
    $product = new Product(null, null, $object); // Aufruf durch ein bereits initialisiertes Objekt


    5 Komplettes Beispiel



    Ihr habt Fragen oder Anregungen? Lob oder Kritik? Lasst es mich doch durch einen Kommentar von euch wissen!

Share