php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.02.2012, 15:35  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
magnetus befindet sich auf einem aufstrebenden Ast
Standard Objektorientierung: Klassenvariablen aus Datenbank "füllen"

Hallo,

an welcher Stelle und wie am elegantesten "fülle" ich die Variablen einer Klasse (oder ist es dann schon ein Objekt?) mit den Daten aus einer Datenbank?
Es geht mir hier nicht um die Lösung eines konkreten Problems sondern eher um den Gedanklichen Ansatz.

Beispielfall:
Es gibt die Klasse "Student" mit den Variablen "ID", "Name" und "Vorname". Es soll nun ein Student mit bekannter ID aus der Datenbank geholt und angezeigt werden.

Hierfür folgende Funktion in der Klasse:

PHP-Code:
function getstudent(ID)
{
$result = [Datenbankbefehlder den Studenten holt]
$this->ID $result[0];
$this->Name $result[1];
$this->Vorname $result[2]; 


Konkretisierung der Fragen:

(1) sollte die Funktion "getstudent (ID)" überhaupt zur Klasse "Student" gehören? Ein "Ja" könnte ich hier noch nachvollziehen.

(2) habe ich nach Folgendem ein vernünftig gefülltes Objekt?

PHP-Code:
$student1 = new Student;
$student1->getstudent(ID); 
(3) Wie sieht es aber aus bei der Darstellung einer Liste von Studenten?

(3a) Konstruriert man besser innerhalb einer Schleife jeweils ein Objekt von "Student" und ruft jedesmal "getstudent(ID)" auf, woher auch immer die IDs kommen?

oder ist es sinnvoller

(3b) einmal alle Studenten in einer unabhängigen DB-Funktion zu holen und in einer Schleife nur die Objekte zu konstruieren und den Objekten jeweils die Variablen aus dern großen result-Array zuzuweisen? Dann wäre o.g. getstudent(ID) Funktion überflüssig, richtig?

oder sollte man hierfür

(3c) die Objektorientierung ganz vergessen, weil "oversized" und eher auf einzelne Objekte und nicht ein "Array von Objekten" sinnvoll anwendbar?

was aber, wenn

(3d) ein "Exmatrikulieren"-Button neben jedem Studenten eine entsprechende Funktion aufrufen soll ? - eine (weitere) Funktion der Klasse, oder?!

In der Hoffnung, beim Verständnis von Objektorientierung kurz vor dem Durchbruch zu stehen, Danke für Hinweise und Antworten zur Ausgangsfrage "an welcher Stelle und wie am elegantesten "fülle" ich die Variablen einer Klasse (oder ist es dann schon ein Objekt?) mit den Daten aus einer Datenbank?"

magnetus
magnetus ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.02.2012, 15:38  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Hi,

kleine Frage: warum nimmst Du nicht einfach PDO (http://de.php.net/PDO)? Schauste hier: http://www.phpro.org/tutorials/Intro...o-PHP-PDO.html

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 02.02.2012, 16:01  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
magnetus befindet sich auf einem aufstrebenden Ast
Standard

Hi wolf29,

danke für den schnellen Hinweis - das muß ich mir wohl mal näher anschauen.
Als Antwort auf Deine "kleine Frage": Weil ich nicht grundlos als "Anfänger" im "Einsteiger" Forum poste
Ist PDO "common sense"? stolpert man da früher oder später automatisch drüber? wonach hätte ich suchen sollen?

Versuche noch, wie geschrieben, die grundlegenden OOP Geheimnisse zu ergründen.

Dabei sind "komplette Abstraktionsschichten" genauso abschreckend, wie folgender Satz: "Sie müssen einen datenbankspezifischen PDO-Treiber benutzen, um auf eine Datenbank zuzugreifen."

Danke trotzdem,
magnetus
magnetus ist offline   Mit Zitat antworten
Alt 02.02.2012, 16:03  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Hi Magnetus,

Zitat:
Versuche noch, wie geschrieben, die grundlegenden OOP Geheimnisse zu ergründen.
Hm..ok. Woran hakt es den dann genau? Scheint dann ja so, alsob dein DB Beispiel, mehr Grundlegend gemeint ist, korrekt?

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 02.02.2012, 17:06  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
magnetus befindet sich auf einem aufstrebenden Ast
Standard

Korrekt!

Zitat:
Es geht mir hier nicht um die Lösung eines konkreten Problems sondern eher um den gedanklichen Ansatz.
An irgendeinder Stelle werde ich doch auch mit PDO ein Objekt erstellen müssen und diesem in welcher Form auch immer Daten aus der DB zuweisen um damit weiterzuarbeiten (und sei es nur, die Daten hübsch darzustellen).

In dem Tutorial http://www.phpro.org/tutorials/Intro...o-PHP-PDO.html passieren ja allerlei Dinge nach "$dbh = new PDO".
Welchem Objekt aber wann welche Variablen zugewiesen werden und wie diese verarbeitet werden [...]?
Möglicherweise wird mit "PDO::FETCH_CLASS" etwas derartiges bewirkt.

Ich merke schon, dass es für grundlegende Verständnisprobleme leider keine einfachen Antworten gibt.

Ggf. versucht sich jemand nochmal an o.g. Fragen (1) - (3d)

Danke und Gruß,
magnetus
magnetus ist offline   Mit Zitat antworten
Alt 02.02.2012, 18:37  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

NEIN

pdo "weist" du keine Daten aus der Datenbank zu .. du benutzt PDO, um über ein DatenbankObject auf die Datenbank zuzugreifen .. Das DatenbankObject ist im Grunde eine Kombination aus der "Datenbank-Instanz" der alten mysql-Erweiterung und gleichzeitig sind die nötigen Methode dazu gebündelt

damit läuft der Zugriff üblicherweise nach folgendem Muster

PHP-Code:
$db=new PDO('mysql:dbname=<DBNAME>;host=<HOST>','<USER>,'<PASSWORT>);
$stmt=$db->prepare("SELECT ...");
$stmt->bind(Parameter);
$stmt->execute();
$result$stmt->fetchAll();
// Ausgeben 
ganz grob ...

siehe http://de2.php.net/manual/de/class.pdo.php und folgende Seiten im Handbuch
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 02.02.2012, 19:51  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
magnetus befindet sich auf einem aufstrebenden Ast
Standard

Hallo eagle275,

mein Problem war und ist nicht, die Daten aus einer Datenbank zu bekommen. Das mag mit PDO ganz fluffig laufen - glaube ich gerne.

Bevor, nachdem oder während ich die Daten aus der Datenbank bekomme (ob nun per PDO, Schubkarre oder Osmose) mochte ich die Daten gerne meinen Klassen- bzw. Objektvariablen zuweisen, z.B.
PHP-Code:
$ID,
$Name und
$Vorname 
Meine Fragen hierzu:

Ist die Funktion, welche die Daten aus der Datenbank holt, eleganterweise

(a) eine Methode der Klasse und weise ich den Klassen- bzw. Objektvariablen die Werte aus §result in dieser Methode zu oder

(b) lasse ich die Funktion sequeziell ablaufen und hole mir die entsprechenden Inhalte aus $result für meine Klassen- bzw. Objektvariablen

Immer unter der Voraussetzung, dass ich danach mit dem Objekt noch etwas anstellen möchte und dafür alle Variablen nach meinen Vorstellungen gefüllt sind...
... dafür ist doch ein aus einer Klasse abgeleitetes (konstruiertes) Objekt gut, oder hab ich hier ein noch viel grundsätzlicheres Problem

Danke und Gruß,
magnetus
magnetus ist offline   Mit Zitat antworten
Alt 03.02.2012, 11:03  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

grundsätzlich hast du beide Möglichkeiten....


wenn man allerdings mal einen Blick auf professionelle PHP-Anwendungen wirft, dann läuft es dort fast immer nach dem Muster :

Es gibt ein Datenbank-Objekt, das oft sogar als "Singleton" verwendet wird (sprich: das Objekt gibt es genau 1 mal während die Anwendung läuft)
du hast eigene Objekte für deine häufig bearbeiteten Daten"Klassen" ..

also der User ist eines , und weitere Objekte für die üblichen Anwendungsdaten. Jede dieser Klassen bekommt zum Beispiel im Constructor dieses Datenbank-Objekt zugewiesen und verfügt ihrerseits über Methoden, um einen betreffenden Datensatz aus der Datenbank zu lesen / zu ändern / zu schreiben.
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 03.02.2012, 11:24  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Für einfach gestrickte Daten-Klassen kann PDO tatsächlich Daten direkt Objekten zuweisen, siehe die Parameter von PDOStatement::fetchObject.

In der Praxis ist mir das bisher aber noch nie untergekommen. Sobald du z.B. mit JOIN verschiedene Tabellen gemeinsam abfragst, stößt du da schnell an deine Grenzen. Die von eagle beschriebene Methode in der die Objekte selber mit der Datenbank kommunizieren nennt sich "Active Record" und ist gerade bei einsteigerfreundlichen Frameworks weit verbreitet, mit dem Stichwort solltest du dementsprechend viele Informationen finden und das würde ich dir auch erstmal empfehlen.

Im wirklich professionellen Bereich sind Datenbank und Domain Objects wie "Student" gar nicht mehr direkt verbunden und es gibt eine Zwischenschicht, die das "Befüllen" aber auch speichern, löschen usw. übernimmt. Wie genau diese umgesetzt ist, dafür gibt es wiederum verschiedene Entwurfsmuster aber das führt hier wahrscheinlich zu weit, ich will ja nicht dass du direkt das Handtuch wirfst sondern nur schonmal weißt dass das noch nicht der Weisheit letzter Schluss ist
fab ist offline   Mit Zitat antworten
Alt 03.02.2012, 11:52  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
magnetus befindet sich auf einem aufstrebenden Ast
Standard

Hallo nochmal,

Vielen Dank für die Mühe beim Lösen der Knoten in meinem Kopf...

...wir kommen der Sachen aber näher.

Zitat:
Jede dieser Klassen bekommt zum Beispiel im Constructor dieses Datenbank-Objekt zugewiesen
Und genau diese Zuweisung bereitet mir die Probleme:

(1) das "Datenbank-Objekt" ist im Idealfall die PDO-Soße von oben, richtig?
(1a) ich brauche also keine "eigenen" Attribute mehr in der Klasse?!
(1b) bearbeiten die Methoden der Klasse dann die Attrbute des zugewiesenen "Datenbank-Objekts"?
(1c) woher werden dann, z.B. beim ändern eines Datensatzes, die neuen Variablen an die Methode übergeben? - aus dem "Datenbank-Objekt"?

(2) bedeutet "Singleton", dass dieses Objekt so ähnlich wie $_Session-Variablen überall verfügbar ist (z.b. beim Navigieren)? - wo finde ich dazu eine Erläuterung?

(3) Ist das "Datenbank-Objekt" dann für für
  • die ganze DB,
  • eine Tabelle (z.B. alle User) oder
  • einen Tabelleneintrag (z.B. den eizelnen User)
zuständig? oder gibt es jeweils ein eigenes "Datenbank-Objekt"?

Ich bin durchaus gewillt, The F***ing Manual zu lesen, wenn mir jemand die Kapitel nennt

Danke und Gruß,
magnetus
magnetus ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Checkboxes nach editieren wieder in die Datenbank abspeichern Falki14 PHP Einsteiger 15 15.01.2012 21:39
[Erledigt] Datensätze von einer MySQL in eine andere MySQL Datenbank abgleichen Marvin75 Datenbanken 7 10.06.2011 18:00
Mehrere Querys klappen in PhpMyAdmin aber nicht in PHP djscaleo Datenbanken 36 15.05.2011 02:00
[Mitmachquiz] Gästebuch mit beliebiger Datenbank Asipak Off-Topic Diskussionen 69 02.03.2011 11:03
[Erledigt] Datensatz von Datenbank A nach Datenbank B kopieren GruenerQuark Datenbanken 2 17.01.2011 17:19
Variablenname aus Datenbank auswerten Eratech PHP Tipps 2010 6 04.05.2010 18:09
Allgemein Werte in Datenbank updaten chunky PHP Tipps 2010 1 08.04.2010 22:35
Datenbank richtig aufgebaut? bageleudi Datenbanken 2 31.03.2010 21:01
schribt nichts in die datenbank Cheesy92 PHP Tipps 2006 9 27.10.2006 14:03
String in Datenbank finden Pimbolie1979 Datenbanken 11 13.10.2006 15:37
Sql Datenbank durchsuchen und vergleichen Teambyte PHP Tipps 2006 5 14.09.2006 11:11
Mehrere Anwendungen eine Datenbank... Datenbanken 5 15.08.2005 11:22
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
INSERT in die Datenbank PHP Tipps 2004-2 4 13.12.2004 19:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
objekt aus datenbank füllen php, ibject klassen id mit inhalt füllen password, datenbank datensätze klassen in einer schleife zuweisen php

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum