Funktionsrückgabe und sauberes Coding

deostift

Erfahrenes Mitglied
Hallo zusammen,

eine richtig peinliche Frage von jemanden, der eigentlich schon eine zeitlang sich mit PHP5 (OOP) beschäftigt:

Mich beschäftigt gerade der Rückgabewert von Funktionen. Bisher habe ich immer den Wert zurück gegeben - sei es ein Integer, Array, Sting, Object etc. - oder eben im Fehlerfall "false".

Dies (zwei unterschiedliche Datentypen als Rückgabe) ist aber nicht sauber. Wie macht Ihr denn Eure Funktionsrückgaben im "Fehlerfall"? Wenn ein Array erwartet wird, gebt Ihr ein leeres Array zurück, wie aber bei Integern .. -1 oder 0 ?

Sowas wie in Perl "undef" gibt es vermutlich in PHP nicht .. oder soll ich hier besser die NULL zurückgeben ...

Ihr seht schon .. Fragen über Fragen :(
 
Ich arbeite mitlerweile sehr gerne mit Execptions im Fehlerfall, diese lassen sich sauber weiterverarbeiten. Gerade wenn eine Funktion mehr macht als nur eine berechnung o.Ä.

Wenn man auf diese Weise arbeitet erstellt man sich einige Fehlerklassen die sich von Execption ableiten. Dann Catcht man die möglichen erwarteten Fehler durch und am ende allgemein auf Execption. So gibt es auch bei nicht richtig eingebauten Fehlern immernoch eine Rückgabe.

http://de.php.net/manual/en/language.exceptions.php
 
Hi Micha - ich habe mich etwas missverständlich ausgedrückt. Echte Fehler fange ich größenteils auch mit Exceptions ab.

Mir geht es eher um leere Rückgaben. Wenn man z.B. den kleinsten Timestamp ermitteln möchte aber es keine Datenmenge gibt. Bisher habe ich dann immer "false" anstatt dem TS zurück gegeben, um zu kennzeichnen, dass kein kleinster TS ermittelt werden konnte.

In Perl würde ich hier allerdings undef zurückgeben. Die Frage ist nun, wie bildet man dies sauber in PHP5 ab. Spätestens bei der Dokumentation der Funktion sollte ich einen Rückgabe Datentyp angeben und der wäre dann bei obigem Beispiel sowohl Integer als auch Boolean.
 
Das hängt eigentlich von der Aufgabe der Funktion ab. Funktionen für einfache Ja/Nein-Probleme sollten true/false zurückgeben. Komplexere Funktionen wie etwa jene für das „Falls-ja-dann-Probleme“ (beispielsweise: Falls Wert in Array enthalten, liefere den Schlüssel, sonst false. Falls x Teilwort von y, liefere Startposition, sonst false.) gestalten sich da schon etwas schwieriger. Hier würde ich mich aber auch auf false als Rückgabewert im Fehlfall festlegen. Das kann aber auch schon fast als philosophische Frage aufgefasst werden.

Dass einige PHP-eigene Funktionen im Fehlfall auch -1 statt false zurückgeben, hängt sicherlich mit der Kompatibilität und dem Ursprung dieser Funktionen zusammen, da C keinen Booleschen Typen hat.
 
Hi Gumbo,

ich habe bisher auch immer "false" für komplexere Funktionen verwendet. Allerdings kam ich beim Erstellen der Funktionen-Doku im Source Code ins grübeln. Hatte bisher immer beim "@return" z.B. array angegeben auch wenn ich im quasi "Fehlerfall" false also Boolean zurückgegeben habe. Somit wäre eine Dokumentation mit @return array falsch, weil sie nicht die Schnittstellen zu dieser Funktion korrekt beschreibt - okay, ist echt schon Haarspalterei :)

Ich werde mich nun künftig für "return NULL" entscheiden, wenn die Funktion auch nichts zum zurückgeben hat. Sollte dann eigentlich immer passen... hoffe ich .. :-/
 
Es ist eigentlich normal, dass Werte/Typen außer den erwarteten Werten/Typen als Fehlerwerte zu interpretieren sind und diese dann auch nicht explizit angegeben werden.
 
Zurück