Sven Rautenberg: Funktionen

Beitrag lesen

Moin!

So, und jetzt mal was zur Funktionalität: Es ist ein ziemlich großes Projekt, an dem ich arbeite und mit vielen Datenbankzugriffen. Meinst du, ich baue jedesmal mit dem ganzen Syntaxsalat eine Verbindung zur Datenbank auf?
Also dann finde ich meine Programmierung wesentlich hilfreicher!

Mal ganz unabhängig davon, welchen qualitativen Wert die Äußerungen von GodofOPHPChecka haben:

Deine selbstdefinierten Funktionen haben keinen wirklichen Wert. Du verkürzst nur minimal den Tippaufwand. Im einzelnen:

1. function DataBaseOpenConnection()
{
 $DataBaseConnection=mysql_connect("localhost","SchumacherA","password");
 mysql_select_db("vub_ir",$DataBaseConnection);
}

Du ersetzt zwei Funktionsaufrufe durch einen. Und das bei einer Funktion, die pro PHP-Datei ohnehin nur ein einziges Mal am Anfang ausgeführt werden muß. Wenn du dir doppelten und dreifachen Wartungsaufwand sparen willst, dann fügst du diese beiden Befehle in eine Include-Datei ein, die du wahlweise mit include() oder require() am Anfang jeder PHP-Datei einbindest. Und machst keine Funktion daraus. Der Vorteil ist dann, daß du auf $DataBaseConnection global zugreifen kannst, und die Variable nicht aus der Funktion herausexportieren mußt.

Im übrigen wäre es praktisch, wenn du um diese Zeilen herum noch ein wenig Fehlerbehandlungscode platzieren würdest. Die Datenbankverbindung muß ja nicht klappen - was passiert dann? Abbruch, Fehlermeldung?

2. function DataBaseExecuteQuery($query)
{
$Result_query=mysql_query($query,$DataBaseConnection);
$Result=mysql_fetch_array($Result_query);
}

Auch diese Funktion nimmt dir nur unwesentlich viel Arbeit ab und tut darüber hinaus nicht, was du willst. Der eigentliche Aufruf von mysql_query ist ja schon eine Funktion - warum dann eine gesonderte Funktion schreiben? Und danach liest du _ein_ Ergebnis des Querys in eine Variable - was ist mit dem Rest der Ergebnisse? Deine Funktion ist in dieser Form Blödsinn. Wenn du das gesamte Ergebnis in einem Array haben willst, mußt du in der Funktion in irgendeiner Art in einer Schleife die Werte abrufen und speichern, und dann das Array übergeben.

Außerdem produzierst du noch ein Problem mit lokalen und globalen Variablen: Alle innerhalb der Funktion definierten Variablen sind lokal, gelten nur innerhalb der Funktion und sind außerhalb der Funktion nicht bekannt. Wenn du also die Datenbankverbindung herstellst, mußt du das Datenbankhandle irgendwie nach draußen liefern. Und draußen muß es dann irgendwo gespeichert werden. Das geschieht mit der Anweisung "return $Variable" in der Funktion, und mit $anderevariable=funktion(); außerhalb. Damit wird der Wert der Funktionsvariablen $Variable an die globale Variable $anderevariable geliefert. So ist es schön.

Du kriegst dann ein Problem, wenn du mehrere Werte zurückliefern willst: Funktionen haben nur ein Ergebnis, können also nur einen Wert mit return zurückliefern. Ausweichmöglichkeiten wären: Zurückliefern eines Arrays oder Hashes (auf jeden Fall zu bevorzugen) und Zugriff auf globale Variablen (ganz ganz böse Falle, weil man damit super ins Stolpern geraten kann und die abenteuerlichsten Fehler auftreten können).

Summa summarum: Deine Funktionen helfen (noch) nicht wesentlich weiter, haben aber aufgrund deiner Unwissenheit über den Wirkungsbereich von Variablen (lokal, global) noch ganz grundsätzliche Fehler. Ich würde vorschlagen, auf diese Funktionen zu verzichten. Die Datenbankverbindung stellst du per include/require her, um Tipparbeit zu sparen, und die Datenbankabfragen würde ich auch ohne Funktion lokal definieren. Dadurch mußt du nicht mit möglicherweise riesigen Arrays hantieren, die nur unnötig den Speicher vollmüllen, sondern kannst sehr individuell die Ausgabe des Ergebnisses programmieren, indem du in einer Schleife die Ergebnisse einzeln von der Datenbank abfragst und direkt verarbeitest.

- Sven Rautenberg