Variablen
PHP typisiert Variablen automatisch, was generell nett ist, aber in einigen Fällen zu Problem führen kann.
Wenn man also in einer Bedingung zwei unterschiedliche Datentypen miteinander vergleicht, wo kommt es zu diesem Problem.
Beispiel:
$wert1 = 0;
$wert2 = 'Hello';
IF ($wert1 == $wert2) {
ECHO 'Die Werte sind gleich';
}
Auf den ersten Blick erscheint dies Abfrage keinen Fehler zu haben, doch PHP versucht "Hello" in einen Integer-Wert umzuwandeln, da aber keine Zahl vorliegt, wird dieser der Wert 0 zugewiesen, was diese Bedingung Wahr macht.
Um solche Fehler zu vermeiden, sollten man immer gleiche Datentypen miteinander vergleichen oder mittels einer Identitätsoperator (===) prüfen.
Beispiel:
$wert1 = 0;
$wert2 = 'Hello';
IF ($wert1 === $wert2) {
ECHO '1. IF: Die Werte sind gleich';
}
$wert1 = (string) $wert1;
IF ($wert1 == $wert2) {
ECHO '2. IF: Die Werte sind gleich';
}
Der Identitätsoperator, welcher seit PHP 4 verfügbar ist, liefert nur dann TRUE wenn beide Werte nicht nur denselben Wert, sondern auch den gleichen Typ haben.
Zahlenwerte
Die automatische Typisierung kann auch unter Zahlenwerten zu Problemen führen.
Beispiel:
$float = 0.3 + 0.3 + 0.3 + 0.1; // Ist 1.0
$int = 1;
IF ($float != $int) {
ECHO '$integer: '.$int.'<br />';
ECHO '$float: '.$float.'<br />';
ECHO 'sind nicht gleich.';
}