• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Welcher Aufbau?

Frucht

Mitglied
Hallo,
derzeit entwickeln wir ja ein CMS, nun mein "Problem" derzeit ist eig. nur der Aufbau bzw. die Initierung der Klasse. Ich habe eine System KLasse die DB Verbindung, Template Lädt und System Einstellungen ausließt. Nun will ich ein Cache System in eine Klasse auslagern und auf die DB Verbindung zugreifen(via sytem::xy). Ich habe unteranderem auch mehrere Functionen und um dort auf die Datenbank zuzugreifen müsste ich jedes mal die Klasse System initieren, wie sieht das mit der Performance aus? Wie kann ich das mit den Klassen besser lösen? Habt ihr evtl Tipps für mich?

Danke schonmal im vorraus : )

mfg
Frucht
 
Ich kann ein konkretes Lösungsbeispiel für den vorliegenden Fall geben. (Das muss allerdings nicht heißen, dass die Grundarchitektur so günstig ist.)

Deine Beschreibung liest sich so, als müsste die Cache-Klasse die Instanz der System-Klasse kennen. Diese könntest du etwa beim Erstellen der Cache-Klasse mit übergeben:

PHP:
<?php

class System
{
    public function fetchSomeData($params)
    {
        // ...
    }

    public function renderUrl($url, $data)
    {
        // ...
    }
}

class Cache
{
    protected $_system = null;

    public function __construct(System $system)
    {
        $this->_system = $system;
    }

    public function cacheUrl($url, $timeToLive = 1200)
    {
        $data     = $this->_system->fetchSomeData(array('url' => $url));
        $rendered = $this->_system->renderUrl($url, $data);

        // ...
    }
}

$system = new System();
$cache  = new Cache($system);
 
Ich würde system da public machen, dass ich auch vom Cache darauf zugreifen kann. Wenn das ein richtiger Cache wird, sollte er die Klasse natürlich serialisieren und als Datei speichern. Bei einer Lifetime von X Sekunden wird diese wieder gelöscht, ansonsten geladen und deserialisiert.

Das dort sieht mir eher nach einer Registry aus.
 
protected $_system = null; -> public $system = null; oder eben das mit getSystem() verfügbar machen.
 
Also System is ne Klasse... kann ich die einfach so public machen wie ne function? Ist die dann Global verfügbar?
 
So habs mir jetzt nochmal durchgelesen. Also ich soll einfach nur die System Klasse serialsieren in einem Objekt speichern und public machen? Hab ich das so richtig verstanden?
 
Wie ich es verstanden habe, sollen keine Objekte gecacht werden, sondern HTML-Ausgaben, oder? Zugriff auf die System-Klasse muss nur bestehen, um dort Methoden aufzurufen, die dabei helfen, die HTML-Ausgabe zu generieren. Falls die Darstellung stimmt, vergiss das mit dem Serialisieren erstmal wieder, das passt nicht so wirklich dazu.

Die Frage, ob "System in Cache öffentlich sein soll" (ich rate an der Stelle wenn dringend zu Getter-Methoden statt öffentlichen Variablen), können wir aus dem hier entstandenen Kontext eigentlich nicht klären. (Mein Codebeispiel sollte an der Stelle nur verdeutlichen, wie die Instanz an den Konstruktor übergeben wird.)

Frucht schrieb:
Wie siehts dann mit der Performance aus? Sollte ich z.b. die Mysqli Verbindung in ein Objekt speichern?

Die Frage ist nicht genau genug formuliert. Deine MySQLi-Instanz könnte aber zum Beispiel eine Instanzvariable von System sein, falls du das meinst.
 
Zurück
Oben