Moin!
Tach!
empty() ist bei so vielen Dingen "empty", die man nicht als empty bezeichnen würde, das geht auf keine Kuhhaut. Beispielsweise ist der String "0" empty. Und das ist eindeutig falsch, denn er enthält ja ein Zeichen.
Kommt auf den Kontext an. Wenn "0" in meinem Fall (zum Beispiel ein Wert in $GET/$_POST) keinen gültigen Wert repräsentieren kann, dann sehe ich empty() nicht grundsätzlich ablehenswert an.
Wenn ich als Leser von Code darüber nachdenken muss, ob die vielfältigen "Nebenwirkungen" von empty() eventuell vom Programmierer in Betracht gezogen wurden, oder aber die Gefahr besteht, dass sie unerwünscht sind, dann lese ich schlechten Code, der seine Intention nicht gut kommuniziert.
Bei Formularvalidierung von erforderlichen Feldern ist das hier viel sinnvoller:
if (isset($_POST['foo']) && $_POST['foo'] !== "") {
// vorhanden und kein Leerstring - damit machen wir jetzt was
}
Im Vergleich dazu:
if (!empty($_POST['foo'])) {
// welche Inhalte von foo werden wohl dazu führen, hier reinzuspringen?
}
Beide Varianten kranken daran, dass sie auch Arrays akzeptieren würden, aber die Empty-Variante würde, wie erwähnt, den String "0" eben auch nicht als Inhalt durchlassen.
Wenn man sowas explizit nicht will, sollte man das explizit in den Code reinschreiben.
Ich halte Abstand von empty() - Formulardatenvalidierung ist nicht so schwer hinzukriegen - dafür gibts existierende Bibliotheken, die das viel besser hinkriegen, als es manuell hinzufummeln.
Man möchte sich ja auch weiterbilden und Anfänger sollen es ja gleich "richtig machen". Wie lautet also deine Empfehlung?
Nun ja, Frameworks bieten zur Validierung von Formularen grundsätzlich was an - daran sollte man sich bedienen, wenn man eines benutzt.
Es gibt bei packagist.org außerdem zahlreiche Standalone-Bibliotheken, die man nutzen kann, beispielsweise siriusphp/validation.
- Sven Rautenberg