Constructor mit SQL

crazy_chicken

Erfahrenes Mitglied
Hallo Zusammen,

folgendes Anliegen und würde mich über Eure Tipps sehr freuen!

Als Beispiel, seien es 2 PHP-Klassen erwünscht "Person" und "PersonAccount".
Die Daten sind in einer SQL-Tabelle gespeichert, z.B.:
Person: ID, Name
PersonAccount: ID, PersonID, Email, Password

Früher habe ich es folgendermaßen Programmiert:

PHP:
class Person{
   private $account;
    public function __construct($person_id){
      $res = mysql_query("SELECT * FROM Person INNER JOIN PersonAccount ON(PersonAccount.ID = Person.ID)");
     $row = mysql_fetch_object($res);
     $this->account = new PersonAccount(0,$ow);
    //und und und...
   }
}
class PersonAccount{
   private $account;
    public function __construct($person_id, $sql_row){
        //Sowas ist unnötig, ODER?
        if($person_id == 0){
             $res = mysql_query("SELECT * FROM Person INNER JOIN PersonAccount ON(PersonAccount.ID = Person.ID)");
            $sql_row= mysql_fetch_object($res);
        }
      //Speichere Daten etc...
   }
}

Der Grund war, dass man nur ein SQL Statement hat, damit die Laufzeit etwas geringer ist.
Aber ich meine jetzt, außer dass es *** Programmierstil ist, bringt es auch von der Laufzeit her eig. auch nichts meine ich.

Danke schon mal!

PS: Bitte syntaktische Fehler, msql_query veraltet etc.. einfach ignorieren, das Programm soll nur die Idee übermitteln.
 
Dein Code macht eh keinen Sinn:
item: In PersonAccount nimmst du einfach den Ersten. Ohne Abhängikeit zu einer Person.

item:
Eine Row zurückzugeben ist nicht wirklich hübsch

Aber was ist deine Frage? Ja, schön ist er nicht. Ob die Klasse beim __construct() befüllt wird oder von Aussen (Factory) entscheidet sich, wie sie angewendet wird.
Wird jeweils nur ein Objekt verwendet (zB. Aktvier User), dann ist das nicht falsch. Wenn aber eine ganze Menge Objekte auf einmal erstellt werden (zB. alle Kunden), dann macht eine Factory mit einer einzigen Abfrage mehr SInn
 
Hi,

Also die Frage ist es, wie man am schönsten sowas Programmiert, welche Lösungen würden sich anbieten.
Macht man normalerweise in jeder Klasse eine SQL-Abfrage um das Object zu befüllen oder bietet sich in so einem Fall was besseres an?

Lohnt es sich überhaupt viele verschiedene SQL-Zugriffe zu vermeiden -> von der Ladezeit her.

Danke!
 
Ob die Klasse beim __construct() befüllt wird oder von Aussen (Factory) entscheidet sich, wie sie angewendet wird.
Wird jeweils nur ein Objekt verwendet (zB. Aktvier User), dann ist das nicht falsch. Wenn aber eine ganze Menge Objekte auf einmal erstellt werden (zB. alle Kunden), dann macht eine Factory mit einer einzigen Abfrage mehr SInn

Allgemein: Eine Abfrage mit 1000 Resultaten ist schneller als 1000 Abfragen mit je 1 Resultat.
 
Zurück