philomatique
Grünschnabel
Hallo,
ich habe mal ein paar grundsätzliche Fragen. Ich hantiere öfter mit Listen von Objekten. Dabei funktioniert das ganze bisher wie folgt:
Als kurze Anmerkung:
Der Code ist bei weitem nicht vollständig und soll nur die Funktionsweise demonstrieren. Also eher eine Art Pseudocode.
Beispielklasse Element
hat eine ID, die nur vom System gesetzt werden kann. In dem Objekt liegen neben den Getter- und Setter-Methoden Funktionen zum Laden und Speichern des Objektes (siehe Beispielcode). Dabei findet die MYSQL-Abfrage zum speichern und laden direkt in der Klasse statt.
Beispielklasse List
beinhaltet einen Array worein alle Objekte vom Typ Element geladen werden. Dabei kann über Parameter und je nach Anwendungsgebiet entschieden werden welche Objekte geladen werden. D.h. es ist möglich alle Objekte zu laden, die einem bestimmten Kriterium entsprechen. In der Methode Load werden alle IDs geholt und dann jedes Objekt einzeln geladen (was bei mehreren hundert Objekten schon viel zu anfrageintensiv ist und lange dauert). Über die Methode getElement() kann man dann auf ein bestimmtes Objekt im Array zugreifen.
Nun meine Fragen:
1)
Würdet Ihr das Laden und Speichern der Objekte aus der Element Klasse verbannen und dafür eine extra Klasse gestalten?
Also eine Klasse, der ich beispielsweise eine Query übergebe? Oder gibt es eine noch bessere Lösung?
2)
Wie verwaltet Ihr Listen von Objekte? Die Lösung von oben ist zwar nett aber doch zu umständlich. Ich brauche jedoch definitiv die Möglichkeit die Ausgabe einzuschränken, also die Funktion in der load()-Methode der Liste, die meine Auswahl an Element-Objekten einschränkt.
3)
Ich habe beobachtet, dass der Array im Speicher sehr viel Platz einnimmt, wenn beispielsweise 500 "Mini-Objekte" (also mit höchsten zehn Attributen und
dazugehörigen Getter- und Setter-Methoden) geladen werden. Woran kann das liegen?
Danke und Grüße
Phil
ich habe mal ein paar grundsätzliche Fragen. Ich hantiere öfter mit Listen von Objekten. Dabei funktioniert das ganze bisher wie folgt:
Als kurze Anmerkung:
Der Code ist bei weitem nicht vollständig und soll nur die Funktionsweise demonstrieren. Also eher eine Art Pseudocode.
Beispielklasse Element
hat eine ID, die nur vom System gesetzt werden kann. In dem Objekt liegen neben den Getter- und Setter-Methoden Funktionen zum Laden und Speichern des Objektes (siehe Beispielcode). Dabei findet die MYSQL-Abfrage zum speichern und laden direkt in der Klasse statt.
PHP:
class element {
private $id;
private $classStuff
// getter...
public function getId();
public function getClassStuff();
// setter
public function getClassStuff($value);
// load and save
public function load($id) {
$result = mysql_query('SELECT ... WHERE id = $id');
$this->id = $result->value->id;
$this->classStuff = $result->value->classStuff;
}
public function save() {
if ($this->id === NULL) {
result = mysql_query('INSERT INTO');
$this->id = mysql_insert_id();
}else {
result = mysql_query('UPDATE ... WHERE id = $this->id');
}
}
}
Beispielklasse List
beinhaltet einen Array worein alle Objekte vom Typ Element geladen werden. Dabei kann über Parameter und je nach Anwendungsgebiet entschieden werden welche Objekte geladen werden. D.h. es ist möglich alle Objekte zu laden, die einem bestimmten Kriterium entsprechen. In der Methode Load werden alle IDs geholt und dann jedes Objekt einzeln geladen (was bei mehreren hundert Objekten schon viel zu anfrageintensiv ist und lange dauert). Über die Methode getElement() kann man dann auf ein bestimmtes Objekt im Array zugreifen.
PHP:
class list {
private $list; // array()
// getter methoden
public function getElement($position) {
return $this->list[$position];
}
public function getSize();
...
// load list
public function load(args) {
// code zum anpassen der "WHERE"-Klausel anhand von args
result = mysql_query('SELECT id ... WHERE');
while ($result) {
unset($temp);
$temp = new Element();
$temp->load($result.->value->id);
$this->list[] = $temp;
}
}
}
Nun meine Fragen:
1)
Würdet Ihr das Laden und Speichern der Objekte aus der Element Klasse verbannen und dafür eine extra Klasse gestalten?
Also eine Klasse, der ich beispielsweise eine Query übergebe? Oder gibt es eine noch bessere Lösung?
2)
Wie verwaltet Ihr Listen von Objekte? Die Lösung von oben ist zwar nett aber doch zu umständlich. Ich brauche jedoch definitiv die Möglichkeit die Ausgabe einzuschränken, also die Funktion in der load()-Methode der Liste, die meine Auswahl an Element-Objekten einschränkt.
3)
Ich habe beobachtet, dass der Array im Speicher sehr viel Platz einnimmt, wenn beispielsweise 500 "Mini-Objekte" (also mit höchsten zehn Attributen und
dazugehörigen Getter- und Setter-Methoden) geladen werden. Woran kann das liegen?
Danke und Grüße
Phil