Übergabe von Objekten / Vererbung / OOP

  • Moin,
    ich bastel mir gerade ein kleines Grundgerüst welches ich für zukünftige Projekte verwenden will.

    Zum Aufbau:
    Ich habe folgende Module (Klassen):

    • Config
    • Database
    • Basic
    • Articles


    Meine init.php sieht wie folgt aus:
    (vorab: es geht um die beiden echos am Ende...)

    Zunächst werden die drei Grundmodule eingebunden und die Objekte instanziert. Dabei wird $oConfig an Database und dann $oConfig und $oDatebase an Basic weitergegeben.

    Letztgenanntes Modul macht z.Z. noch nicht mehr als das:

    PHP
    class Basic {
        var $config;
        var $database;
    
        function __construct($oConfig,$oDatabase) {
            $this->config = $oConfig;
            $this->database = $oDatabase;
        }
    }

    Nun kommt das Articles Modul ins Spiel, welches von Basic abgeleitet wird.

    Kurze Info: In Config gibt es eine Methode die Werte aus einer Datei ausliest und in ein Array schreibt welches eine Eigenschaft von Config ist. Diese heißt valueOf.


    Nun zu den letzten beiden Zeilen der init.php:

    PHP
    echo $oBasic->config->valueOf['example'];
    echo $oArticles->config->valueOf['example'];

    Das erste funktioniert und gibt mir den Wert von example, aus der oben angesprochenen Config Datei, aus.
    Die zweite Zeile gibt weder den Wert noch eine Fehlermeldung aus.

    Und ich würde gerne wissen warum. :)

    mfG Markus

  • PHP
    $oArticles = new Articles;
    PHP
    class Basic {
        var $config;
        var $database;
    
        function __construct($oConfig,$oDatabase) {

    in Articles steht vermutlich im __construct ein parent::__construct für den __construct von Basic. Woher nimmst du in Articles die erwarteten Parameter $oConfig,$oDatabase für den parent::__construct?

  • Oh man... jo danke! Das ists natürlich. Beim Abeleiten wird der Konstruktor der Eltern Klasse nicht ausgeführt, richtig?
    An parent::__construct oder so hab ich gar nicht gedacht :/

    Werd ich morgen gleich checken, besten Dank für den Denkanstoß... :)
    und danke, dass du dir die Zeit genommen hast!

    Einmal editiert, zuletzt von FaFoo (4. Dezember 2008 um 21:43)

  • Kein Problem, gerne.

    Wenn du die Instanz von Basic nicht zusätzlich zu der brauchst, die dann im __construct von Articles erstellt wird kannst du dir die ja auch sparen (kann natürlich sein, dass du beides brauchst, weiß ja nicht was du vorhast).
    Dann schreibst du halt einfach:


    und im __construct von Articles dann eben

    PHP
    parent::__construct($oConfig,$oDatabase);


    Was mich aber wundert, dass dir dein Code keine Meldung ausspuckt. Hast du error_reporting hochgedreht? Eigentlich müßte ein notice kommen, vermutlich sowas wie Trying to get property of non-object in ...

  • Achso, wenn du in Database sowieso die ganze Instanz von Config benötigst und in Basic die kompletten Instanzen von Config und Database könntest du da auch einfach die Eltern-Tochterklassen Struktur weiterführen
    -->
    class Config
    class Database extends Config
    class Basic extends Database
    class Articles extends Basic

    Dann brauchst du in deiner init.php nur noch Articles instanzieren.

    Naja, aber das ist auch wieder ne Frage der weiteren Verwendung der Klassen.

  • Ja mein Plan war aber, dass ich jedes weitere Modul nur noch von Basic ableiten muss und dann über

    PHP
    $this->config
    $this->database
    $this->basic


    auf die entsprechenden Objekte zugreifen kann... aber wenn ich so drüber nachdenke ist das für meine Zwecke gar nicht nötig und überhaupt nicht zweckdienlich... :P

    mfG Markus