• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Klassen & Objekte ???

Crying Man

New member
Im Source von dieser Version des VBB habe ich gemerkt, das die die Datenbankabfragen mit Objekten durchführen, wie geht das ganze???

In irgend einer Datei war auch noch die Deklaration einer Klasse (class), in der eine Verbindung hergestellt wurde.
 
Bahnhof?!?!

also obwohl ich ned weiß was ein VBB ist oder wozu sowas gut sein soll (*outemichalsunwissender*) und auch nicht die Programmiersprache kenne, die zugrunde liegt, kann ich Dir zumindest bestätigen, daß man sehr wohl mit Klassen auf Datenbanken zugreifen kann.... sei es in C++, in PHP oder in Java.... und wenn man VB als nicht OOP Sprache dazu nimmt, dann geht das hier auch... ach quatsch in VB, bzw. ASP geht es _nur_ über Klassen, da mußt Du nämlich Interface Objekte instanzieren, mit deren Hilfe Du mit der DB kommunizierst...

ciao,

Albu
 
Wenn ich was ins Serverseitige Programmierungs-Forum poste geht es grundsätzlich um PHP :)

mit VBB meinte ich dieses Board ("Virtual Bulletin Board") :)
 
ajo... kann ja alles mögliche heißen.... :))

also gut PHP.... *grübel*...
Klassen in PHP.... naja da hast Du Dir eine Sprache ausgesucht, die Klassen nur so grade mal eben unterstützt (trotzdem in den meisten Fällen durchaus mehr als ausreichend)... aber vom OOP Standpunkt her ist das nicht gerade super....
Aber die Vorteile einer Klassenorientierung liegen, bei richtiger Anwendung, in der Kapselung der Zugriffe auf eine bestimmte Tabelle in einer einzigen Datei / Klasse. Jetzt wirst Du sagen, das hab ich jetzt auch in einer Datei und ruf da ein halbes Dutzend Funktionen auf. Aber in der Klasse sind diese Sachen doch noch mal ein bißchen übersichtlicher aufgehoben. Ich hab zum Bleispiel eine Klasse geschrieben, die mir die SQL Befehle, bzw. das Zusammenbauen derselben abnimmt, d.h. ich instanziere z.B. ein Objekt CTableInsert und füttere das mit den entsprechenden Feldern und Werten. irgendwann rufe ich einfach tab->execute auf -> fertig!
Ein weiterer Vorteil ist die (mögliche) Wiederverwertbarkeit... meine CTableSelect, CTableInsert, usw. Klassen kann ich in jedem Projekt verwenden, in dem mit SQL gearbeitet werden soll. Und wenn mal ein Projekt kommt, wo die Daten nicht über SQL, sondern anders gespeichert werden müssen, dann wird eine Subklasse von CTableXXX abgeleitet und dort die Funktion execute neu definiert... fertig -> die Daten werden korrekt im neuen Format gespeichert!!
Oder denk mal an die Unabhängigkeit vom DBMS... heute mySQL, morgen ODBC, übermorgen Oracle?? Mit einer Lib (z.b. PHPLIB phplib.netuse.org) kannst Du von jetzt auf gleich die Zugriffsfunktionen von mysql_* auf odbc_* umswitchen, ohne daß Du Search & Replace machen mußt. Wenn ich ehrlich sein soll: Ich kenne die Befehle zum Öffnen einer Datenbank ala mysql_* gar nicht mehr so genau... die sind für mich zu Low Level.... ich arbeite eher eine Abstraktionsstufe höher, bin so aber unabhängig von der Datenbank (vorrausgesetzt ich halte mich an SQL Standards, d.h. mySQLs LIMIT im SELECT Statement ist z.B. tabu, sonst bleibt man auf mySQL kleben....)

ei kann doch niemand ahnen, was ein VBB ist... :)
 
Interessanter Text, wenn ich nur zur Hälfte verstanden hätte was du sagst...

Ich wollte eigentlich wissen wie man sowas macht, ein praktisches Beispiel oder so.
 
hmm also anscheinend hast Du ja schon ein Beispiel (nämlich VBB), da ich das aber nicht kenne, kann ich nicht sagen wie gut das programmiert ist und ob der Programmcode einfach und verständlich ist.
Das Problem an dem Ganzen ist allerdings das prinzipielle Verständnis von Objektorientierung. Das unterscheidet sich nämlich enorm vom prozeduralen Ansatz. Denn mit dem Verwenden von class und dem Zusammenfassen von Funktionen und Variablen in eine Klasse ist es eben nicht getan. Bei OOP muß man umdenken, sonst brauch man erst gar nicht anfangen.
Und das jetzt hier rüber zu bringen ist relativ schwierig.
 
Also durch den Code vom Board steig ich kein bischen durch, da wurden ja auch ein paar Jahre dran programmiert und da kommen schon einige Zeilen zusammen :)

Wo bekomm' ich denn Informationen zur Programmierung mit Klassen ?
 
wo gibts den Code denn zum Download, weil dann kann ich ihn mir mal anschauen.....
ein paar Jahre für so ein Forum.... hmm das halt ich für übertrieben.... vielleicht sind über die Jahre immer wieder neue Versionen rausgekommen, aber das man an einer Version Jahre programmiert.... vielleicht zwei - drei Monate wenn mans alleine macht

Information... hmm mir fällt jetzt kein geeigneter Link ein, aber ich sag mal so: programmiertechnische Seite, d.h. class, extends und new, sind schnell gelernt, aber die konzeptionelle Seite, d.h. wie teile ich meinen Code auf Klassen auf usw. das braucht jede Menge Übung....
 
Also, das Board gibt es nicht zum Download, das kostet ein paar Mark.
Ich habe eine lizensierte Vollversion und hab mir halt mal den Code angeschaut, da ich eigentlich vorhatte mal sowas selber zu Programmieren (Das hab ich in meiner Anfangszeit gemacht und am Ende war das Ding 'n einziger Bug :()

Ich meinte das Board an sich (mit der Programmierzeit), die haben das ja ständig weiter entwickelt
 
bezahlen??? wie uncool...
dann ist ja sowieso fraglich, ob Du beim Bezahlen nur das Nutzungsrecht erworben hast oder auch das Recht eigene Modifikationen zu machen....
 
naja ist schon richtig, man hat zumindest einen gewissen Anspruch auf (Installations-) Support und bei einem Update sollte man davon ausgehen können, das die Daten danach nicht alle futsch sind...
ob es bessere gibt? keine Ahnung so intensiv hab ich mich noch ned mit Boards beschäftigt.... aber prinzipiell gibt es mit Sicherheit ein halbes Dutzend OpenSource Bretter, die auch nicht schlecht sind.... und meist sind die Leute dankbar, wenn man seine Hilfe anbietet.... so kann man zum einen die Features einbauen, die man selbst sucht unbd bekommt zum anderen einen sehr guten Einblick wie das Board dann später funktioniert... nicht zu schweigen von den (möglicherweise) internationalen Kontakten und der Möglichkeit seine Englishkenntnisse aufzupolieren....
 
Ne class wird so definiert:
class db_zugriff {

var $database = "";

var $link_id = 0;
var $query_id = 0;
var $record = array();

var $errdesc = "";
var $errno = 0;
var $show_error = 1;

var $server = "";
var $user = "";
var $password = "";

var $appname = "WoltLab Burning Board";

function connect() {
if ( 0 == $this->link_id ) {
die("");
}
}
}
hab ich auch aus einen board aber den unterschied zwischen class und function versteh ich nicht!
 
was weiß ich warum aber die class muss ja wohl functionieren nur das ich den unteren teil abgeschnitten haben

function insert_id() {
return mysql_insert_id($this->link_id);
}

da is noch ne function die da stand


ich hab die class mal angehängt, jetzt erkläre mir einer mal wo der unterschied zwischen class und function is und wofür man einen class braucht!
 

Anhänge

  • class_db_zugriff.txt
    2,9 KB · Aufrufe: 8
Eine Class kannst du im Code z.B. so ansprechen:

$db->mysql_query("sqlzeugs");

und schon hast du einen SQL-string ausgeführt, der Verbindungsaufbau erfolgt in der class
 
@xxoes: also der Unterschied zwischen Funktionen und Klassen liegt einfach darin, daß Du hier alle Funktionen, die Du jemals mit Deiner DB anstellen willst in eine einzige Klasse packst. Klaro kannst Du auch über Funktionen machen, aber dann mußt Du einen Haufen an Parametern mit Dir rumschleppen. z.B. die erste Funktion macht die Connection auf -> ConnectId merken, dann führt man ein Select aus -> resultId merken, dann holt man sich die Records -> RecordSet merken. Das alles macht die Klasse über ihre Klassenvariablen. Du brauchst nur noch zu sagen was Du brauchst, die Zustände und Zwischenvariablen werden automatisch gespeichert.
Und durch den Austausch der Klasse db_zugriff kannst Du auf einen Schlag von mySQL weg zu ODBC gehen. Im Funktionsfall hättest Du entweder direkte mysql_* Funktionen benutzt, da wo Du sie gebraucht hast, oder Du hättest Dir Zwischenfunktionen gebastelt. Im ersten Fall müßtest Du Search & Replace im gesamten Projekt machen, im zweiten würdest Du die Funktionen umschreiben. Aber wer weiß vielleicht sind hier plötzlich andere Rückgabewerte, die sich trotzdem im normalen Programmcode auswirken. Und schwups mußt Du doch alles durchschauen. Bei der Klasse mußt Du lediglich dafür sorgen, daß die "Schnittstelle" nach außen, d.h. für den Aufrufer identisch bleibt. Wie das dann intern verwurstet wird ist allen Beteiligten völlig egal.

@Crying Man: also das var kennzeichnet Variablen (ach neee... :) ). Innerhalb von Klassen kannst Du eigene Variablen definieren, die zur Speicherung von internen Zuständen oder als Schnittstelle nach außen dienen können. Im normalen Programmtext ist es nicht notwendig Variablen vor ihrer Benutzung zu definieren, aber der Klasse muß man schon sagen, welche Variablen zu ihr gehören und welche sie nur flüchtig (innerhalb von Klassenmethoden) kennt.

Prinzipiell ist die Klasse ja schon mal ganz nett, aber wenn es die einzigste Klasse ist, dann wurde OOP auch nur halbherzig eingesetzt. Weil jetzt könnte man weitergehen und z.B. für jede Tabelle eine eigene Klasse anlegen, mit Klassenvariablen, die den Tabellenfeldern entsprechen und Zugriffsfunktionen, um einen neuen Datensatz dieser Tabelle anzulegen, zu ändern oder zu löschen. Oder eine Select Funktion, die als Parameter den eindeutigen Schlüssel dieser Tabelle reinbekommt und dann die Klassenvariablen entsprechend auf die Werte aus der DB setzt.
Dann muß ich mich bei einem Select nur noch darum kümmern: welche Tabelle brauche ich -> entsprechende Klasse instanzieren ($tab = new CTableXXXX) und was ist der Primärschlüssel ($tab->selectID ($ID)) beides ist im Kontext meist sowieso klar. Auch bei einem Insert sind nur die wirklichen einzufügenden Parameter notwendig. Ich muß nicht sehen, daß ich einen Tabellennamen reingebe oder wo ich die Verbindung zur DB aufbauen muß, oder wie die Daten letztendlich in die DB kommen.

So hoffe, das hilft ein wenig :)

Ciao,

Albu
 
Du bist beruflich auch Programmierer, oder? Man merkt es daran, wie du schreibst, für einen Hobby-Programmierer wie mich nur schwer verständlich. Aber ich verstehe schon was du meinst (mit viel mühe :)).

Ich werde mich mal in nächster Zeit damit beschäftigen :)
 
Zurück
Oben