dedlfix: if/else

Beitrag lesen

Tach!

Andererseits ist ein Leerstring zwar leer, aber ein String mit Leerzeichen ist es nicht. empty() hätte hier also nicht allein geholfen.

Eine Plausibilitätsprüfung habe ich nicht geliefert, das ist richtig. Aber Bernds Frage war eher, warum seine Prüfung auf Leerstring nicht griff. Hier hat mein Code geleistet, was Bernds Code nicht leisten konnte.

Doch, Bernds Code hat genauso reagiert wie die Empty-Variante. Beide können nämlich nicht nicht-leere Strings als leer erkennen. Damit können sie beide keine Leerzeichen enthaltenden Strings als leere Eingabe werten.

Ein empty(trim($array['feld'])) ist zwar mittlerweile ausführbar (früher wollte empty() lediglich Variablen und keine Ausdrücke als Parameter), hat aber wieder das Problem, dass für das trim() der Wert $array['feld'] ermittelt werden muss, und das zur bekannten Notice bei Nichtvorhandensein führt.

Also war mein Code für diese Prüfung alleine besser.

In Bezug auf die Notice, aber das ist dann auch nicht mehr wichtig, wenn er nicht zum Ziel führt.

empty() ist keine normale Funktion sondern ein Sprachkonstrukt, und PHP löst hier nicht den übergebenen Parameter auf, wie es das bei normalen Funktionen tun würde.

Wozu auch? Es ist eine Holzhammer-Methode! Wer sie einsetzt, muss sie genau kennen, um sie korrekt anzuwenden.

Du hast mich da wohl falsch verstanden. Das sollte eine allgemeine Erklärung zum Sonderstatus von empty() als Sprachkonstrukt statt normale Funktion werden.

Man kann also zwar hier mit empty() arbeiten, muss aber selbst das Vorhandesein des Eintrags in $_POST prüfen und darauf ein trim() ausführen, bevor man empty() bemüht.

Oder man macht einfach eine echte Plausibilitätsprüfung, indem korrekt nach dem Vorhandensein des Array-Schlüssels geschaut wird (array_key_exists()), um dann den Wert auf seine Gültigkeit hin zu prüfen.

Lieber isset() verwenden. Auch das ist ein Sprachkonstrukt und erzeugt keine Notice-Meldungen. array_key_exists() trennt Array und Key auf zwei Parameter auf, so dass der Key nun ein Magic String ist. Wenn man isset($array['key']) nimmt, bleibt das $array['key'] syntaktisch beieinander und kann besser von IDEs mit Code-Analyse erkannt werden. Eine solche Code-Analyse versucht die für Array-Keys verwendeten Stringliterale zu erkennen und kann diese dann beim Code-Vervollständigen besser vorschlagen, als Stringliterale, die sonstwo als Magic String verwendet werden. Aber ja, fachlich gesehen ergibt es keinen Unterschied. (Der Unterschied bezüglich NULL enthaltende Werte ist hier nicht relevant, weil das im $_POST-Array normal nicht vorkommen kann.)

dedlfix.