Klasse aus Datenbank generieren
Linda
- php
Hallo alle,
ich suche ein Lösung mit der ich eine PHP-Klasse direkt aus der Datenbank generieren kann. Um das etwas plastische darzustellen:
class tabelle {
// Dynamische Klassenvariablen-Deklaration
// Als Ergebnis sollte eine Auflistung alle Attribute=Spaltenname aus einer Tabelle kommen
var $spaltenname_1;
var $splatenname_2;
var $spaltenname_n;
...
// Konstruktor
function tabelle($id) {
$sql = „select * from tabelle where id=“.$id;
// Hier sollte die dynamische initialisierung des Objektes kommen
$this->[spaltenname_1]=[spaltenwert];
$this->[spaltenname_2]=[spaltenwert];
$this->[spaltenname_n]=[spaltenwert];
...
}
}
Der Sinn dahinter ist, die Deklaration der Klassenvariablen und Initialisierung des Objektes aus der Struktur der Tabelle zu erzeugen. Die Tabelle ändert sich momentan, weil ich im Entwicklungsstadium bin :) Später wird diese wohl nicht so oft verändert werden.
Frage1: Geht so was ohne Harakiri-Methoden?
Frage2: Weil es ja im Moment aus Faulheit heraus kommt, ist so was überhaupt für die Entwicklung sinnvoll?
Danke.
Gruß, Linda
echo $begrüßung;
ich suche ein Lösung mit der ich eine PHP-Klasse direkt aus der Datenbank generieren kann. Um das etwas plastische darzustellen:
mysql_fetch_object() gibt ein Object. Allerdings nützt dir das nicht viel, weil es von der Klasse stdClass ist, nicht von deiner gewünschten.
Es empfiehlt sich eher mysql_fetch_assoc() und das Array mit foreach zu durchlaufen und die Objekt-Variablen aus den Keys anzulegen und den Wert zu übernehmen.
Klingt kompliziert? Als Code liest es sich einfacher:
while ($row = mysql_fetch_assoc(...))
foreach ($row as $key => $value)
$this->$key = $value;
echo "$verabschiedung $name";
Hallo dedlfix,
Klingt kompliziert? Als Code liest es sich einfacher:
while ($row = mysql_fetch_assoc(...))
foreach ($row as $key => $value)
$this->$key = $value;
>
Das klingt gut und nicht kompliziert. Danke. Das wäre dann Konstruktor, und was mache ich mit der Deklaration der Klassenvariablen?
Gruß, Linda
--
2 hours of try and error can save 10 minutes of manual reading
echo $begrüßung;
was mache ich mit der Deklaration der Klassenvariablen?
Eine explizite Deklaration ist nicht nötig. So wie das bei PHP üblich ist, werden hierbei
$this->$key = $value;
die Objekt-Variablen, so noch nicht vorhanden auch gleich angelegt.
echo "$verabschiedung $name";
Hallo dedlfix,
Eine explizite Deklaration ist nicht nötig.
Ich muss mir wohl die OOP für PHP genauer angucken und nicht von Java auf PHP schlissen :) Danke Dir, Du hast mir sehr geholfen!
Gruß, Linda
Hallo dedlfix,
doch zu früh gefreut. Da zieht mir Zend Studio Strich durch die Rechnung. Ohne Klassendeklaration kriege ich keine Code-Vervollständigung. Muss ich, Faulpelz, doch deklarieren.
Gruß, Linda
echo $begrüßung;
doch zu früh gefreut. Da zieht mir Zend Studio Strich durch die Rechnung. Ohne Klassendeklaration kriege ich keine Code-Vervollständigung. Muss ich, Faulpelz, doch deklarieren.
Schreibst du für den Editor/die IDE oder für dich? :-)
Die Code-Vervollständigung ist zwar was feines, aber aufgrund des sehr lockeren Typ-Konzeptes von PHP nicht bis ins letzte verwendbar.
Wie soll die Code-Vervollständigung auch immer richtig liegen, wenn Funktionen mal ein Array und mal (bei Nichterfolg) ein boolean zurückgeben?
Das Zend-Studio soll aber auch mit Dokumentationskommentaren der Form
// @var typ ... genaue Syntax weiß ich nicht
umgehen können. Damit kann man der Codevervollständigung gezielte Hinweise geben.
echo "$verabschiedung $name";
echo $begrüßung;
Frage2: Weil es ja im Moment aus Faulheit heraus kommt, ist so was überhaupt für die Entwicklung sinnvoll?
Schau doch mal, ob dir nicht vielleicht die PEAR-Klassen DB_Table oder DB_DataObject gefallen.
echo "$verabschiedung $name";
ich suche ein Lösung mit der ich eine PHP-Klasse direkt aus der Datenbank generieren kann. Um das etwas plastische darzustellen:
hoppla hopp, hier kommt etwas offensichtlich durcheinander.
was genau willst du ? welchen sinn macht das ?
um eine klasse aus einer tabelle zu erstellen, müßte ein 'generator' herhalten, welcher aus der tabelle eine klasse mit den spaltennamen erzeugt. diese klasse müßte aber auch gewisse (automatisch generierte) methoden haben, damit das ganze sinn macht.
allerdings ist diese 'rückwärts' vorgehensweise aus entities klassen zu bilden nicht im sinne von ooa/ood.
richtig ist die vorwärts-strategie, also erst zu wissen wie die klasse aussehen muß, und dann die tabelle dazu anzulegen.
dann kann man auf 'logischer' ebene damit arbeiten.
ich habe da ein demo-beispiel auf http://24-x.de/Dokumentation/Persistenz.htm hinterlegt.
versuch das mal zu verstehen. es lohnt sich.