Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufbau eines Systems mit mehreren Dialogschritten
Stonebreaker62 10-08-2006, 12:35 Hallo,
ich bin mit einem eigentümlichen Problem konfrontiert. Ich entwickle ein System, das über mehrere Dialogschritte hinweg Daten sammelt, die ich in Session-Variablen zwischenspeichere. Ist alles gesammelt und verifiziert, wird in eine MySQL DB gespeichert. Den Dialogablauf steuere ich über Buttons die ich entsprechend abfrage ($_REQUEST["buttonname"]). Ich habe bisher alles in eine einzige PHP-Datei reincodiert, die inzwischen etwa 100 KB gross ist. Bislang funktionierte dies prächtig. Nachdem ich nun aber einige weitere Funktionsblöcke dazucodiert habe, funktioniert plötzlich die Dialogsteuerung nicht mehr, konkret, es werden Sequenzen durchlaufen, die zu anderen Buttons gehören. Die Buttons werden richtig gesetzt (den Button-Inhalt habe ich mir per echo anzeigen lassen). Meine Fragen:
1. Ist es denkbar, dass PHP ein Problem mit großen PHP-Dateien hat?
2. Wenn nicht, wie komme ich dem Problem auf die Spur (ich entwickle mit Eclipse, habe aber noch nie mit dem DEBUG Mode gearbeitet)
2. Sollte ich generell bestimmte Funktionsblöcke auslagern und nur bei Bedarf includen, damit die Datei klein bleibt?
3. Oder sollte ich aus demselben Grund für jeden Dialogschritt eine eigene PHP-Datei machen?
Danke für Eure Tips
Benny-one 10-08-2006, 12:44 1. Nein
2. vll. durch auskommentieren
3. Am besten du lagerst alles in eine Klasse aus und machst für jeden Block eine Methode
4. blos nicht.
onemorenerd 10-08-2006, 12:47 1. Nein, mit 100kB absolut nicht!
2. echo __LINE__; von vorn bis hinten durch den Code schieben, bis mal was ausgegeben wird, was du nicht erwartet hast?
2./3. Abwägen zw. Lesbarkeit des Codes und Performance.
PS: Wenn deine Dialogschritte ähnlich nummeriert sind wie deine Fragen, hab ich das Problem schon gefunden. ;)
Stonebreaker62 10-08-2006, 12:52 Klassen benutze ich bereits für alle Funktionselemente, die mehrfach vorkommen. Wenn ich deinen Rat umsetze stellt sich deshalb folgende Frage:
Kann ich in einer Methode einer Klasse andere Methoden derselben Klasse aufrufen?
rgds
Benny-one 10-08-2006, 12:54 Original geschrieben von Stonebreaker62
Kann ich in einer Methode einer Klasse andere Methoden derselben Klasse aufrufen?NEIN. Das wäre ja total gegen OOP :rolleyes:
Logisch geht das $this->my_function();
nix_wie_weg 10-08-2006, 13:01 ich würde für jeden Dialogschritt ein separates include machen im gemeinsamen Rahmenscript. Ferner würde ich Hilfsfunktionen auslagern. Ein Programm von 100KB, entsprechend 3500 Zeilen, am Stück ist im Editor gefährdet. Bei separaten includes wird die Verschachtelungstiefe geringer, Files die nicht offen sind, können nicht vertippt werden, die Ueberprüfung von Kopf bis Fuss, bzw. spätere Wartung ist bei angenommenen 500 Zeilen pro Dialogschritt einfacher, und es zwingt zu einem etwas formelleren Protokoll der Verwendung.
Stonebreaker62 10-08-2006, 13:11 das heisst, ich codiere eine Klasse, die die Elemente der Ablaufsteuerung enthält und eine zweite Klasse, die alle Methoden enthält, die aus der ersten Klasse heraus aufgerufen werden?
so etwa?
if (isset ($_REQUEST['button1'])) {
$steuerung->macheSchritt1 ();
}
if (isset ($_REQUEST['button2'])) {
$steuerung->macheSchritt2 ();
}
......
Klassendefinition:
class steuerung {
function macheSchritt1 () {
$ausfuehrung->machewasAnderes();
}
function macheSchritt2 () {
code
}
}
class ausfuehrung {
function machewasAnderes () {
code
}
}
Stonebreaker62 10-08-2006, 13:19 Frage zu Nix_wie_weg Ansatz. Bei Dir saehe es dann so aus?
if (isset ($_REQUEST['button1'])) {
include ("schritt1.php!):
}
if (isset ($_REQUEST['button2'])) {
include ("schritt2.php!):
}
nix_wie_weg 10-08-2006, 14:02 halbwegs. Du vergisst aber ,dass wenn der Benützer Button2 gedrückt hat, du zweikommafünf Dingetun musst.
1. die eingaben von button2 plausibilieren und zwischenspeichern
2. die maske für button3 ausgeben.
2. die maske für button2 ausgeben.
Hat Benützer aber button3 gedrückt, so musst du folgende zweikommafünf Dinge tun:
1. die eingaben von button3 plausibilieren und zwischenspeichern, bzw. falls die Schritte vollständig sind, abspeichern
2. die maske für button4 ausgeben.
2. die maske für button3 ausgeben.
Falls es umfangreich ist, würde ich z.B. das gleiche button3.php sogar zweimal inkluden und dort mit einem internen if den 1. bzw. 2. Schritt auseinanderhalten.
Das andere, mit einer Klasse, ändert am Umfang des Haupt-php-Skripts überhaupt nichts, und es braucht nicht mal eine klasse dazu, gewöhnliche Funktionen würden auch gehen um den Code zu strukturieren.
[edit: warum zweikommafünf??
man muss drei Schritte im Script haben, nämlich 1., 2. und 2.
Verarbeitet werden aber nur zwei, nämlich 1. 2. oder 2.
Macht im Durchschnitt zweikommafünf.]
nix_wie_weg 10-08-2006, 14:14 Original geschrieben von mir
Falls es umfangreich ist, würde ich z.B. das gleiche button3.php sogar zweimal inkluden und dort mit einem internen if den 1. bzw. 2. Schritt auseinanderhalten.
Diese Anordnung im includeten Script für zB Button2 erlaubt sogar im Skript, zuerst den <form> Teil zu haben und nachher den plausi() Teil, entgegen der Verwendung. Gemacht habe ich es aber noch nie, da ich nicht so aktiv bin.
Stonebreaker62 10-08-2006, 14:14 klar, dass ich die Eingaben validieren muß und abhaengig vom Ergebnis die alter oder neue Maske ausgebe. Das mache ich in jedem der jeweiligen Includes.
Wuerdest due die Steuerungsbuttons in die Includes kodieren oder ins Hauptscript?
Stonebreaker62 10-08-2006, 14:47 Also ist folgender Aufbau optimal, wenn ich ein groesseres System entwickeln muß (hinsichtlich Übersichtlichkeit und Performance)?
Klar, dass ich innerhalb der Include-Bloecke auch strukturiere und mit Klassen/Funktionen arbeite.
if (isset ($_REQUEST['button1'])) {
include ("schritt1.php"):
}
if (isset ($_REQUEST['button2'])) {
include ("schritt2.php"):
}
schritt1.php:
db connect
if isset (submitButtonSchritt1) {
--validierung Form von Schritt 1
--if valide {
-----Ergebnisse Schritt 1 in Session-Variablen speichern
-----echo Ausgabe Schritt 2 Maske
-----echo Button Schritt 2
-----db close
-----exit;
--} else {
-----echo Ausgabe Schritt1 Maske (mit fehlermeldungen)
-----echo Button Schritt 1
-----DB close
-----exit;
}
HTML (PHP embedded): Ausgabe Schritt 1 Maske
DB close
Stonebreaker62 11-08-2006, 00:22 Hallo, koennte mir einer der Moderatoren noch einen Kommentar zu den beiden Empfehlungen geben?
Alternative1: für jeden Dialogschritt eine Methode in einer Klasse codieren;
Alternative 2: abhaengig vom Dialogablauf entsprechende Code-Sequenzen includen) .
Welche Variante wuerdet Ihr bevorzugen?
Habe ich die jeweils richtigen richtigen Schluesse aus den Empfehlungen gezogen ?
|
-
- |