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
  #21 (permalink)  
Alt 21.12.2010, 14:39
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

Interessanter Ansatz. Allerdings frage ich mich immer, ob das ganze überhaupt noch vertretbar ist aus sicht der Leistungsfähigkeit. Ich mein, man muss die Attribute erst umständlich zu einer Syntaktisch korrekten Query zusammenbauen, die schlussendlich vom SQL-Server wieder geparst wird. Außerdem müssen die ganzen Objekte ja auch zwischengespeichert werden. Ich kann mir das aber auch nur einbilden.

Ist auf jedenfall schöner als wenn man jeden einzelen Query selbst zusammenschraubt.
__________________
github | http://dnaber.de
Mit Zitat antworten
Sponsored Links
  #22 (permalink)  
Alt 21.12.2010, 15:28
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.845
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 Praktikant Beitrag anzeigen
Wie lange hast du ungefähr gebraucht bis zu deinem jetzigen Stand. Wie nah am "Ende" bist du mittlerweile?
Am Framework an sich habe ich die letzten 2 Monate gearbeitet, allerdings nicht am Stück. Vorher hatte ich bereits einen Versuch mit nahezu identischen Klassen wie aus dem Buch "PHP Design Patterns" unternommen, habe dann aber festgestellt, dass man Patterns nicht "einfach so" umsetzen sollte.
Und natürlich habe ich einige Klassen, z.B. DbQuery und Template bereits vorher schon gehabt und habe diese nur auf's Framework angepasst, sonst hätte ich entschieden länger gebraucht, da gerade die beiden Klassen für mich in der Entwicklung sehr zeitaufwendig waren.
Am Ende werde ich wohl nie sein, da das Framework eine Basis darstellen soll und sämtliche Module, die ich später mal brauche nach Möglichkeit integriert werden sollen.
Momentan baue ich 3 Seiten damit auf, eine einfache Website mit Kontaktformular, eine Bildergalerie und einen Shop.
Ich denke, wenn ich damit durch bin kann ich auf 1.0-beta gehen.
Ich neige aber dazu auch in fortgeschrittenen Zyklen Schnittstellen auf einmal über den Haufen zu werfen, so dass ich mir das gut überlegen muss.
Ich weiß auch noch nicht, ob ich das mal veröffentlichen will oder es auch nur mein kleines Werkzeug bleibt.

Zitat:
Zitat von David Beitrag anzeigen
Interessanter Ansatz. Allerdings frage ich mich immer, ob das ganze überhaupt noch vertretbar ist aus sicht der Leistungsfähigkeit. Ich mein, man muss die Attribute erst umständlich zu einer Syntaktisch korrekten Query zusammenbauen, die schlussendlich vom SQL-Server wieder geparst wird. Außerdem müssen die ganzen Objekte ja auch zwischengespeichert werden. Ich kann mir das aber auch nur einbilden.
Das stimmt auf jeden Fall, Performance geht verloren, aber das ist klar, anders geht's halt nicht.
Für mich besteht der Vorteil darin, dass ich mich nicht um so Dinge wie das quoten der Spalten oder escapen der Werte kümmern muss, weil das von DbQuery automatisch vorgenommen wird, das hilft schonmal bei der Übersichtlichkeit.
Zusätzlich bleibt man zu einem gewissen Grad portabel.

Bei einer Bildergalerie, die ich momentan entwickel gibt es z.B. ein "Image"-Model, welches von DbTable erbt. Bilder können veröffentlicht sein oder nicht, also hat das Model zwei Methoden "publish" und "unpublish" erhalten, welche ganz einfach so aussehen:
PHP-Code:
public function publish($id) {
    
$this->updateByCondition(
        array(
            
$this->primary => $id
            
'published'    => 0
        
), 
        array(
            
'published' => 1
            
'modified'  => date('Y-m-d H:i:s')
        )
    );

Das erste Array gibt die Bedingung an, das zweite die Felder und Werte, die aktualisiert werden sollen.
So reduziert sich ein reines veröffentlichen von Bildern im Controller auf:
PHP-Code:
$imageModel->publish($request->getParameter('id')); 
Der Parameter 'id' kann hier eine einzelne Id oder ein Array von Ids sein.
Andernfalls müsste man im Controller stets die korrekte Bedingung mit angeben und dafür sorgen, dass das Feld 'modified' ebenfalls aktualisiert wird.

Aber hier stellt sich eine grundsätzliche Frage, welcher jeder für sich beantworten muss: Fat-Models oder Fat-Controller?
Ich tendiere zu Fat-Models.

Zitat:
Zitat von David Beitrag anzeigen
Ist auf jedenfall schöner als wenn man jeden einzelen Query selbst zusammenschraubt.
So sehe ich das auch, wobei man aber natürlich auch mit Perpared-Statements arbeiten kann.
Als ich mit meiner DbQuery-Klasse angefangen habe gab es dies in der heutigen Form in PHP aber noch nicht bzw. nur als Extra-Modul und mittlerweile habe ich mich an meine Klasse gewöhnt.
Mit Zitat antworten
Sponsored Links
  #23 (permalink)  
Alt 21.12.2010, 17:04
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

Zitat:
Zitat von mantiz Beitrag anzeigen
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.
In wie fern ist das für das Escapen wichtig? Escapest Du jedes der Attribute, die Du den Methoden mitgibst, bevor du es in die Query einsetzt?
__________________
github | http://dnaber.de
Mit Zitat antworten
  #24 (permalink)  
Alt 21.12.2010, 17:23
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.845
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

Jap, mache ich.

Oben genanntes Query würde also zu:
Code:
SELECT * FROM `table1` AS `t1` LEFT JOIN `table2` AS `t2` ON `t2`.`id` = `t1`.`id`
Das war mir deshalb wichtig, da ich (besonders früher, heute nicht mehr so häufig) teilweise Spaltennamen verwende die Schlüsselwörter sind, z.B. "key" oder auch mal "table", die können dann nur gequotet verwendet werden, ansonsten gibt's 'nen Fehler und da ich mir darüber keine Gedanken machen möchte ist das dabei herausgekommen.
Mit Zitat antworten
  #25 (permalink)  
Alt 21.12.2010, 17:38
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.028
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Warum schreibst du das eigentlich selbst? Erfüllen ORM wie RedBean, Doctrine oder Outlet deine Anforderungen nicht?

Zum Lernen habe ich sowas auch vor einiger Zeit mal geschrieben, aber im produktiven Einsatz würde ich kein eigenes ORM pflegen wollen.
Mit Zitat antworten
  #26 (permalink)  
Alt 21.12.2010, 18:22
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.845
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 inta Beitrag anzeigen
Warum schreibst du das eigentlich selbst?
Das frage ich mich auch des öfteren.

Zitat:
Zitat von inta Beitrag anzeigen
Erfüllen ORM wie RedBean, Doctrine oder Outlet deine Anforderungen nicht?
Wahrscheinlich würden die meine Anforderungen größtenteils erfüllen und bei vielen Dingen weitaus mehr unterstützen.
Von den genannten hatte ich mir allerdings nur Doctrine mal genauer angesehen.

Zitat:
Zitat von inta Beitrag anzeigen
Zum Lernen habe ich sowas auch vor einiger Zeit mal geschrieben, aber im produktiven Einsatz würde ich kein eigenes ORM pflegen wollen.
Stimmt schon, es ist mit einem gewissen Aufwand verbunden.
Ich versuche möglichst viel selbst zu schreiben, weil ich dann nicht (oder nicht so häufig) überrascht werden kann.
Wahrscheinlich könnte ich mir viel Zeit sparen, wenn ich mich einfach mal in ein paar Frameworks einarbeiten würde, aber meistens finde ich irgendwelche Dinge, die mir nicht gefallen und dann muss ich entweder damit arbeiten und ärgere mich ständig darüber oder ich muss einen Workaround finden.

Bitte nicht falsch verstehen, ich finde die Frameworks fast alle super, es ist nur nicht so ganz meins, ich fühle mich bei Eigenentwicklungen einfach wohler.
Ist aber nicht bei jedem so und das ist auch gut so.
Mit Zitat antworten
  #27 (permalink)  
Alt 21.12.2010, 20:21
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.495
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
... aber meistens finde ich irgendwelche Dinge, die mir nicht gefallen und dann muss ich entweder damit arbeiten und ärgere mich ständig darüber oder ich muss einen Workaround finden.

... ich fühle mich bei Eigenentwicklungen einfach wohler. ...
Einer der Gründe, warum ich versuche mit OOP ein eigenes CMS für mich zu entwickeln.

[OT]
Der wichtigste Grund ist bei mir die SQL Datenbank, irgendwie mag ich die Dinger nicht.

Beispiel:
Flatfile bietet die Möglichkeit, Daten zwischen Web, Net-/Notebook und USB-Stick per copy&paste portabel zu machen. Mit SQL geht das nur per aufwändigen Export/Import und ich kann nicht die Betriebssystem Suche zum Durchsuchen von Dateiinhalten verwenden.
[/OT]

Egal, lernen ist angesagt und dieser Thread zeigt wirklich gute Denkanstöße
__________________
Personal stuff
Mit Zitat antworten
  #28 (permalink)  
Alt 21.12.2010, 20:47
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.028
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von laborix Beitrag anzeigen
Flatfile bietet die Möglichkeit, Daten zwischen Web, Net-/Notebook und USB-Stick per copy&paste portabel zu machen. Mit SQL geht das nur per aufwändigen Export/Import und ich kann nicht die Betriebssystem Suche zum Durchsuchen von Dateiinhalten verwenden.
Die Portabilität hast du auch mit SQLite, nur die Durchsuchbarkeit wohl (noch) nicht.
Mit Zitat antworten
  #29 (permalink)  
Alt 21.12.2010, 20:49
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
 
Registriert seit: 16.07.2007
Ort: Bruck an der Mur - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.786
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

OT
Leute, ich werde alt. Ich habe nicht den geringsten Tau, was ihr da redet. Ich mag php - sogar recht gerne - aber redet ihr eine andere Sprache hier? - im Vergleich mit euch fühle ich mich wie ein 386er Intel ...
Bin schon wieder wech ...
/OT
Mit Zitat antworten
Sponsored Links
  #30 (permalink)  
Alt 21.12.2010, 22:03
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

Meinst Du den Objekt-orientierten talk? Davon versteh ich auch nicht wirklich viel. Das ganze ist interessant, klar. Aber die abstrakten Denkweisen muss man erstmal verstehen lernen. Das schaff ich seit zwei Jahren nicht. (Hab aber auch nicht wirklich dran gehangen).
__________________
github | http://dnaber.de
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 19:55 Uhr.