Klasse mit Klasse in Session

String

Erfahrenes Mitglied
Huhu,

ich habe zwei Klassen
PHP:
class User {
    private $sql;

    function User($sql) {
        $this->sql = $sql;
    }
}

class SQL {
    ... hier kommt halt SQL Zeugs hin
}

$sql = new SQL("use", "db", "pw");
$_SESSION['user'] = new User($id, $sql);

Der User wird korrekt angelegt und auch in der Session abgelegt. SQL arbeitet beim ersten Seitenaufruf auch korrekt.
Sobald ich aber eine Seite aufgerufen habe, also wenn das Objekt wirklich aus der Session kommt und $sql nicht an den User übergeben wird, ist die SQL Klasse in der User Klasse defekt..

Hat da jemand eine Idee wie man das besser macht bzw. so macht, dass es funktioniert****

paD
 
Das ist auch eifnach kacke was du da machst, um es mal krass auszudrücken... Eine Session ist nicht dafür gedaacht, komplexe Objektkompositionen zu speichern!
Abgesehen davon ist es auch sinnfrei, eine SQL-Klasse über den normalen Reuqest-Scope hinaus am Leben zu erhalten. Injiziere die eifnach bei einem reload erneut.
Außerdem schau dir mal die Funktion serialize() an und ließ nach, welche Abhängigkeiten gespeichert werden und welche nicht.
Es würde sich anbieten, NUR die Id in der Session zu speichern und das Objekt jeweils neu zu instanziieren!

Und noch ein Tipp: Arbeite mit PHP5, und nicht mit einer Mischung aus PHP4 und 5 (bei welchen Settings wirft dein Code eigentlich keine warnings raus?)
 
Gibts auch nen Grund dafür, dass es kacke ist?
Oder ist es "einfach Kacke".. :D

Der Vorteil wäre halt, dass ich nicht immer den User aus der DB laden muss.

Und wie wäre es, wenn du wenigstens ein BISSCHEN konstruktiv schreibst und sagst, was ich besser anders machen sollte?

Also meinst du sollte ich wie üblich einfach die UserID in die Session, Objekt bei jedem Seitenaufruf neu erstellen und die SQL einfach immer übergeben?

paD
 
Die datenbankverbindung musst du eh aufbauen; ergo macht das deine Applikation auch nicht langsamer oder komplexer.
2.) Können eben, wie du schon bemerktest, keine ressourcen oder Objektabhängigkeiten in eienr Session gespeichert werden
3.) Das glovale(!!) Session-array entspricht nicht dem OO-Paradigma der kapselung von daten.
 
Habs jetzt so gelöst. Schade, dass es nicht so geht.
Es spart z.b. dass ich bei jedem Seitenaufruf den User aus der DB laden muss.
Es spart unter anderem, dass ich alle Objekte immer neu Aufbauen muss (User-Objekt).
Würde sich also schon bemerkbar machen.

Aber wie du schon schriebst, Ressourcen kann man anscheinend nicht in die Session schreiben.

Und was meinst du jetzt mit PHP4 & PHP5 Gemisch? Bzw. wo siehst du nen Problem mitm setter oder getter?
 
PHP:
class User {
    private $sql; // Sichbarkeitsstufe private ist PHP5

    function User($sql) { // Namen der Klasse als Methode als alias zum Konstruktor ist PHP 4. PHP 5: __construct()
        $this->sql = $sql;
    }
}
 
Zurück