Tach!
Wenn ich einen Integer erwarte, will ich aus einem übergebenen String doch nicht herauslesen, dass es ein String ist, oder? Sondern ich wandle in einen Integer um, der im Zweifelsfall den wert 0 annimt.
Ja, kann man mit einem einfachen intval() erledigen. Aber andererseits schadet es auch nicht, wenn du einen (syntaktisch korrekten) String zum DBMS schickst, auch wenn das nur einen Zahlenwert erwartet. Die Konvertierung (zu notfalls 0 oder NULL) findet dann im DBMS statt.
Ob 0 oder NULL passende Werte sind, kannst du eh nicht mit einer globalen Funktion entscheiden, das muss fachlich je Fall entschieden werden.
Aber wenn ich mir das mal genau überlege, hast du dir durch diese Funktion gar keinen großen Vorteil erschaffen gegenüber dem direkten Behandeln an Ort und Stelle.
Stimmt fast. Denn in meiner Funktion kann ich ja noch viel mehr mach, bspw. MIN und MAX Werte festlegen, festlegen, ob ein float-Wert nur positiv oder auch negativ sein darf, einen String auf Zeichen untersuchen, die ich haben oder nicht haben will, usw.
Ja, fachliche Prüfungen. Sind aber kaum mit einer globalen eierlegenden Wollmilch-Prüffunktion sinnvoll abzuhandeln. Da sind kleinere Einheiten, die genau auf ein Thema spezialisiert sind, einfacher zu warten und zu verstehen.
(Für Zahlen kann man mit intval() statt settype() einen Integer erzwingen.)
Worin liegt der Unterschiede der beiden Funktionen eigentlich?
intval() arbeitet funktional, settype() hingegen prozedural. Das heißt, dass du den Rückgabewert von intval() gleich in einem Ausdruck verwenden kannst, settype() aber ein eigenständiger Aufruf sein muss. Außerdem wird die Variable umgeschrieben, bei intval() hingegen im Original belassen.
dedlfix.