• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

"false" und "0"

Ich denke mal, ich habe den "Fehler" gefunden. Ich wollte es mir einfach machen und nebenbei den Quellcode aufräumen. Diese zwei PHP-Zeilen haben anscheinend unterschiedliche Gültigkeitsbereiche:
PHP:
#Gibt "Ich bin falsch!" aus
if(!$VALIDATE->checkNumber('0', 'demo'))
{
    echo "Ich bin falsch!";
}

#Gibt nichts aus
if($VALIDATE->checkNumber('0', 'demo') === false)
{
    echo "Ich bin falsch!";
}
Was bedeutet es denn genau, wenn man ein Rufzeichen vor eine Methode setzt? Anscheinend nicht nur false, oder?
Vielleicht kann hier noch jemand Aufklärung verschaffen. Danke!
 
Der !-Operator castet das Argument vermutlich nach Boolean und ändert dann true in false und umgekehrt. Und var_dump((bool) "0"); ist false, wird also zu true.

„===“ vergleicht dagegen typsicher. Das heißt, die "0" würde vor dem Vergleich nicht zu false umgewandelt.

- PHP: PHP type comparison tables - Manual

Ich würde nach Möglichkeit aber auf Methoden, die gemischte Datentypen zurückgeben (checkNumber in diesem Fall mindestens Booleans oder Integers) verzichten. Das ist mitunter sehr verwirrend.

PHP:
<?php

$_POST['foo'] = "300";

if (filter_var($_POST['foo'], FILTER_VALIDATE_INT) === false) {
    die('foo ist kein Integer');
}

$foo = (int) $_POST['foo'];

if ($foo < 0 || $foo > 100) {
    die('foo liegt nicht zwischen 0 und 100');
}
 
Ich wollte aber während des Prüfen, auch gleich den String bereinigen. Die Bereinigung hat aber keinen Sinn, wenn dann nachher eh nur true oder false zurückgegeben wird. Daher dieses "Misch-Masch".
Ist es in Ordnung, wenn ich statt dem Rufzeichen (!), typsicher prüfe und "=== false" schreibe? Dann dürfte es ja keine Probleme geben, oder?
 
Ok. :D Du hattest ja selbst gesagt, dass du beim Validieren auch gleichzeitig trimmst und Zeichen entfernst, die du nicht haben willst. Wie soll ich das jetzt lösen?
Ich habe eine Klasse (Validator), die einen String auf verschiedene Muster prüft (Zahl, PLZ, E-Mail, Name, …). Vorher trimme ich noch, und entferne unnötige Zeichen. Ist das komplett falsch?

Ich möchte dieses Thema nicht unnötig in die Länge ziehen, aber mir ist es wichtig, dass ich meine Chance zu Fragen, nicht einfach verpassen will. :) Jedenfalls vielen Dank für deine vielen, vielen Antworten hier.
 
Das klingt eigentlich schon ganz gut.

Validierung von Eingaben ist leider doch ein recht schwieriges Thema. Weiß nicht, ob ich dir diese beide Artikel mal verlinkt habe:

- Affenformular - PHP Forum: phpforum.de
- Affenformular (Standardverfahren) - PHP.de Wiki (der ist in der Hinsicht noch nicht mal fertiggeschrieben worden. ;))

Auch die Wiki-Schreiber drücken sich arg davor.

Leute schreiben teilweise große Klassensammlungen für sowas.

- Zend Framework: Documentation: Introduction - Zend Framework Manual

Ich finde leider gerade keinen wirklichen Zugriff, eine Erklärung zu formulieren. Dazu könnte man wohl sowas wie MVC verfassen.
 
Vielen, vielen Dank dir! Ich werde mir das anschauen – und hoffentlich wieder etwas dazu lernen. ;)
Nochmals danke für deine viele Hilfe und vielen Tipps.
 
Zurück
Oben