zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP, OOP und Array Übergabe

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 14.12.2010, 19:19
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Das ist sicherlich ein guter Weg, darüber werde ich einmal nachdenken, danke

Ich habe aber noch nicht so ganz verstanden warum du den Primary der Tabelle speicherst. Ich speicher immer nur den Namen der Tabelle in der Konfigurationsdatei und frage dann ab. Was machst du denn, wenn du mal ein Feld abfragen musst, welches nicht Primary ist oder du einen Zusammengesetzen Primary hast?
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 14.12.2010, 20:24
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Wenn ich ehrlich bin, dann ist das ganze noch in der Entwicklung und ich würde es als pre-Alpha einstufen, das vielleicht noch ergänzend.

Den Primary speichere ich aus Faulheit, ganz einfach, ist immer gut, wenn man als Programmierer zu einem gewissen Grad faul ist.

Die einfache (soll heißen normale) fetch-Methode bekommt als ersten Parameter eine Bedingung als Array übergeben, wenn ich aber bereits weiß, dass die Bedingung lediglich auf den Primärschlüssel filtert, wieso sollte ich den Primärschlüssel jedes Mal mit angeben und ihn so über den Code verteilen?

Für mich bedeutet das: Zentralisierung.

Wie bereits erwähnt lässt sich so eine Methode "find($primary)" schreiben, welche mir einen Datensatz zurückliefert, der im Primärschlüssel den Wert von $primary besitzt, oder aber $primary ist ein Array, dann werden sämtliche Datensätze mit den entsprechenden Primärschlüsseln zurückgeliefert.
Mir ist bei meinen Codes aufgefallen, dass ich sehr häufig anhand der Primärschlüssel selektiere, das muss aber längst nicht bei jedem so sein.

Eine weitere Methode von DbTable ist z.B. "update($primary, array $data)", welche einen bzw. mehrere Datensätze entsprechend der in $data angegebenen Felder aktualisiert.

Wie gesagt, so lässt sich der Primärschlüssel fix ändern und da die Klasse teil eines Frameworks ist woran ich derzeit arbeite sollte diese auch so flexibel wie möglich sein.

Ansonsten müsste ich die Bedingung immer vollständig mit angeben, was bei mir z.B. so aussehen würde:
PHP-Code:
$commentModel->update(array('id' => 1), array('published' => 1)); 
Warum aber ständig "array('id' => 1)" schreiben, wenn "1" reichen kann?

Zusätzlich gibt es aber noch eine Methode "updateByCondition", wo man eine beliebige Bedingung angeben kann, es ist also nicht auf den Primärschlüssel beschränkt.

Wie gesagt ist die Klasse noch nicht fertig, aber falls bis dato komplizierte Queries benötigt werden besitzt die Klasse "DbConnection" bzw. "MysqlDbConnection" eine Methode "query", welche direkt ein SQL-Query entgegen nimmt und ausführt, darüber hat man dann sämtliche Freiheiten.

Zur Info:
DbConnection bzw. deren Erben sind bei mir die Datenbank-Wrapper um Funktionen wie "mysql_query" und Konsorten zu kapseln.

Aber wie gesagt, das muss nicht bei jedem so passen.

Dazu kommt, dass ich mich in letzter Zeit ein wenig mit Inversion-of-control beschäftigt habe, was wohl generell bei Frameworks sehr beliebt ist.
Im Prinzip geht es dabei darum, dass die Klassen bzw. Objekte sich die Daten, die sich brauchen, nicht selbst besorgen, sondern diese von "außen" (häufig automatisch, bei mir aber nicht) zugewiesen bekommen, das macht es aber zwangsweise nötig, dass diese lokal im Zielobjekt gespeichert werden.

Vorteil des ganzen ist, dass die Klasse weniger Abhängigkeiten besitzt und somit, so die Hoffnung, vielseitiger und einfacher eingesetzt werden kann.

Z.B. werden bei mir die Datenbankverbindungen automatisch vom Frontcontroller per lazy-loading anhand der Config erstellt und verbunden, ein (normaler) Controller muss sich zu keiner Zeit darum kümmern.

Aber es wäre denkbar, dass ich nur einen einzigen bestimmten Controller aus dem Framework für eine kleine Anwendung verwenden will.
Wenn dieser Controller z.B. lediglich eine DbConnection von außen erwartet, dann kann ich diese 2 bzw. 3 Klassen aus dem Framework auskoppeln und einzeln verwenden:
PHP-Code:
require('lib/DbConnection.php');
require(
'lib/MysqlDbConnection.php');
require(
'lib/SimpleController.php');

$dbConnection = new MysqlDbConnection();
$dbConnection->getConfig()
   ->
set('hostname''localhost')
   ->
set('username''...')
   ->
set('password''...')
   ->
set('database''...');

$controller = new SimpleController();
$controller->setDbConnection($dbConnection);
$controller->doSomething(); 
Wenn der Controller sich die DbConnection beispielsweise nur automatisch vom Frontcontroller holen würde und ihm nicht eine eigene zugewiesen werden könnte, müsste man u.U. recht viele Abhängigkeiten erfüllen, bis die Klasse vernünftig verwendet werden könnte.

Naja, meine Erklärung hinkt ein wenig, aber ich hoffe es wird so einigermaßen klar welche Gedanken dabei eine Rolle spielen.
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 14.12.2010, 20:58
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.494
laborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Mensch
Standard

Hey , dass war mein Thread

Spass beiseite, cool, da ich noch in den Anfängen stecke. kann ich hier jetzt echt was lernen. Nicht aufhören, ok?
__________________
Personal stuff
Mit Zitat antworten
  #14 (permalink)  
Alt 15.12.2010, 00:04
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Oh sorry.

Ich habe mich selbst auch (besonders beim zweiten Post) ziemlich erschrocken wie lang die Antworten geworden sind, war so nicht beabsichtigt.

Vielleicht sollte ich auch noch dazu sagen, dass ich mir im Vorfeld besonders die Frameworks Zend, CakePHP und APF angesehen habe und mich zwangsweise auch mit dem Java-Framework Apache Tapestry beschäftige.

Ich habe mir das alles also nicht komplett selbst ausgedacht, sondern versucht mein Verständnis von der ganzen Materie umzusetzen.

Ich kann nur empfehlen sich mal ein paar Frameworks anzusehen, ich habe das Gefühl, dass ich dabei sehr viel gelernt habe.

Jetzt ist das schon wieder so lang geworden ...
Mit Zitat antworten
  #15 (permalink)  
Alt 15.12.2010, 20:46
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.494
laborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Mensch
Standard

Zitat:
Zitat von mantiz Beitrag anzeigen
Oh sorry. ...
Kein Problem

Sequenziell Programmieren mit PHP war bisher nicht allzu schwer, aber mit OOP ist das ganze in Bezug auf Abhängigkeiten von Klassen und Funktionen nicht so einfach.

Vor vielen Jahren habe ich Job bedingt aufgehört mit dem Programmieren (Cobol/Assembler/C). Inzwischen werde ich im Beruf mit vielen Webinterfaces für Server aller Arten konfrontiert, die teilweise HTML-, Java- und PHP-Module beinhalten. Es wird Zeit mich damit etwas tiefer auseinander zu setzen
__________________
Personal stuff
Mit Zitat antworten
  #16 (permalink)  
Alt 15.12.2010, 21:25
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Zitat:
Zitat von laborix Beitrag anzeigen
Sequenziell Programmieren mit PHP war bisher nicht allzu schwer, aber mit OOP ist das ganze in Bezug auf Abhängigkeiten von Klassen und Funktionen nicht so einfach.
Das kenne ich nur zu gut.

Zitat:
Zitat von laborix Beitrag anzeigen
Vor vielen Jahren habe ich Job bedingt aufgehört mit dem Programmieren (Cobol/Assembler/C). Inzwischen werde ich im Beruf mit vielen Webinterfaces für Server aller Arten konfrontiert, die teilweise HTML-, Java- und PHP-Module beinhalten. Es wird Zeit mich damit etwas tiefer auseinander zu setzen
Je nachdem wieviel Zeit und Interesse vorhanden ist, kann ich nur dazu raten sich einmal verschiedene Frameworks anzusehen und zu schauen, wie dort verschiedene Dinge gelöst wurden, war für mich aber ein schwerer Weg auf dem ich zwischenzeitlich alles, was ich bis dato gelernt hatte in Frage gestellt habe.
Jedes hat so seine Stärken und Schwächen.
Beim Verständnis der Frameworks und der darin umgesetzten Patterns hat mir das Buch PHP Design Patterns sehr geholfen.
Mit Zitat antworten
  #17 (permalink)  
Alt 21.12.2010, 12:29
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Wenn ich mich mal fragend einklinken darf: @Mantiz, wie realisierst du (bzw. wie hast du vor zu realisieren) joins? Willst Du mehrere Tabellen-Objekte miteinander verknüpfen, oder machst Du sowas händisch, also über eine normale SQL-Abfrage?
__________________
github | http://dnaber.de
Mit Zitat antworten
  #18 (permalink)  
Alt 21.12.2010, 12:36
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Entschuldige, dass ich so lange nichts habe von mir hören lassen. Ich habe deinen Text mehrfach gelesen und mir Gedanken gemacht. Ich denke, ich werde mir viel bei dir abschauen und mich ebenfalls mehr mit Frameworks auseinander setzen Danke für den Tipp mit dem Buch.

Ich habe aber verstanden worauf du mit deinen Gedanken hin willst und gemerkt, dass es Sinn macht das ganze so aufzubauen. Danke für deine Beschreibung.

Zitat:
Zitat von David Beitrag anzeigen
Wenn ich mich mal fragend einklinken darf: @Mantiz, wie realisierst du (bzw. wie hast du vor zu realisieren) joins? Willst Du mehrere Tabellen-Objekte miteinander verknüpfen, oder machst Du sowas händisch, also über eine normale SQL-Abfrage?
Ich denke so etwas realisiert er über die Methode query, welche ein MySQL-Anweisung direkt ausführt.
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
  #19 (permalink)  
Alt 21.12.2010, 14:00
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Zitat:
Zitat von David Beitrag anzeigen
Wenn ich mich mal fragend einklinken darf: @Mantiz, wie realisierst du (bzw. wie hast du vor zu realisieren) joins? Willst Du mehrere Tabellen-Objekte miteinander verknüpfen, oder machst Du sowas händisch, also über eine normale SQL-Abfrage?
Ja, momentan mache ich sowas quasi händisch.
Die Klasse DbTable unterstützt keine Joins, soll halt eine simple Model-Klasse sein, die genau einer Datenbank-Tabelle entspricht.
Aber man könnte eine Model-Klasse DbJoinedTables schreiben, die das erledigen würde.
Zum Aufbauen von Queries habe ich eine Klasse DbQuery, womit ich das relativ simpel machen kann.

Beispiel:
PHP-Code:
$list $dbConnection->select()
        ->
from('table1 t1')
        ->
join('table2 t2''t2.id .''t1.id''left')
        ->
getList(); 
Zur Info:
DbConnection::select() liefert eine vorkonfigurierte Instanz meiner DbQuery-Klasse zurück.
Der Punkt bei "t2.id ." gibt an, dass es sich bei dem Wert "t1.id" um eine Tabellen-Spalte handelt, das ist für das Escapen wichtig.
Bei Mysql wird dadurch aus "t1.id" "`t1`.`id`", ansonsten würde es als String behandelt werden.

Welche Tabellen wie gejoined werden sollen könnte man per Attribute vorsehen und das Query anhand dessen aufbauen.

Sollten noch kompliziertere Queries benötigt werden, dann muss ich erstmal in den sauren Apfel beißen und das Query per Hand zusammenbauen.

Ich hatte vor einger Zeit auch mal versucht einen OR-Mapper zu schreiben, bin aber kläglich gescheitert, ist nicht zu unterschätzen.
Evtl. greife ich das irgendwann nochmal auf, aber bestehende OR-Mapper sind nicht umsonst so umfangreich, da gibt es einiges zu beachten was mir momentan einfach zu komplex ist.
Erstmal brauche ich jetzt eine hoffentlich vernünftige Grundstruktur.

Zitat:
Zitat von Praktikant Beitrag anzeigen
Entschuldige, dass ich so lange nichts habe von mir hören lassen. Ich habe deinen Text mehrfach gelesen und mir Gedanken gemacht.
Kein Problem.

Zitat:
Zitat von Praktikant Beitrag anzeigen
Ich denke, ich werde mir viel bei dir abschauen und mich ebenfalls mehr mit Frameworks auseinander setzen Danke für den Tipp mit dem Buch.
Im Grunde schaust Du ja nicht bei mir ab, sondern bei den ganzen Frameworks.
Sehr viele Ansätze (zumindest was grundsätzliches betrifft) habe ich ja aus den anderen Frameworks, nicht dass der Eindruck entsteht ich hätte mir das alles selbst ausgedacht, ich kann's nicht oft genug sagen.
Vor allem die Unterteilung in Bootstrap-Datei (bei mir die index.php), Router, Frontcontroller, (Application-)Controller habe ich aus dem Zend-Framework, wobei Zend im Frontcontroller noch einen extra Dispatcher für den Aufruf (die Aufrufe) von Controllern verwendet. Dies macht ebenfalls Sinn, da Zend hier eine Controller-Chain einsetzt, welche es erlaubt mehrere Controller-Actions verkettet auszuführen.
Für mich habe ich dafür aber keine Notwendigkeit gesehen, also hab' ich darauf verzichtet.

Zitat:
Zitat von Praktikant Beitrag anzeigen
Ich habe aber verstanden worauf du mit deinen Gedanken hin willst und gemerkt, dass es Sinn macht das ganze so aufzubauen. Danke für deine Beschreibung.
Kein Problem, am Ende bin ich mit der ganzen Sache auch noch nicht. Ich muss jetzt erstmal ein paar (kleinere) Projekte damit umsetzen, um zu sehen, wie sich das ganze in der Praxis verhält, oft ergeben sich dann Anforderungen, wo man vorher noch nicht dran gedacht hat.
Ich hoffe es ändert sich nicht mehr all zu viel.
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 21.12.2010, 14:30
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Aber du hast mich auf die Idee gebracht, dort wirklich mal reinzuschauen. Sonst hätte ich das wahrscheinlich nie gemacht

Zitat:
Zitat von mantiz Beitrag anzeigen
Kein Problem, am Ende bin ich mit der ganzen Sache auch noch nicht. Ich muss jetzt erstmal ein paar (kleinere) Projekte damit umsetzen, um zu sehen, wie sich das ganze in der Praxis verhält, oft ergeben sich dann Anforderungen, wo man vorher noch nicht dran gedacht hat.
Ich hoffe es ändert sich nicht mehr all zu viel.
Wie lange hast du ungefähr gebraucht bis zu deinem jetzigen Stand. Wie nah am "Ende" bist du mittlerweile?
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe geschieht nur einmal Benutzername Serveradministration und serverseitige Scripte 0 12.05.2011 16:59
wo ist OOP für php sinnvoll? sqrack Serveradministration und serverseitige Scripte 5 12.09.2010 17:23
PHP OOP: Datenbankeintrag Klasse - ein paar theoretische Überlegungen braindead Serveradministration und serverseitige Scripte 17 24.07.2009 07:29
PHP: zweidim. Array mit eindimensionaler Struktur in Eindim. Array umwandeln? braindead Serveradministration und serverseitige Scripte 4 08.07.2008 14:31
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:22 Uhr.