1. Erläuterungen
Strings werden von PHP — je nach Kontext — im Rahmen des sogenannten Type Jugglings automatisch in Integer umgewandelt. Das Prinzip ist dabei einfach: Vom String werden alle Zeichen am Anfang ausgelesen, die zu den Ziffern von 0 bis 9 gehören. Aus diesen wird dann der Integer-Wert gebildet. Ab dem ersten Zeichen, das keine Ziffer ist, werden dieses und alle folgenden Zeichen ignoriert. Beginnt der String nicht mit einer Ziffer, dann wird er als 0 interpretiert.
2. Vergleich mit ==
In diesem Beispiel wird der Integer-Wert 123 mit dem String „123” in verschiedenen Ausführung verglichen.
<?php var_dump( 123 == '123', // true 123 == '123a', // true 123 == 'a123', // false 123 == '123.1', // false 123 == '1abc', // false 123 == 'abc', // false 123 == '1a2b3c', // false 0 == 'abc' // true ); ?>
bool(true) bool(true) bool(false) bool(false) bool(false) bool(false) bool(false) bool(true)
3. Vergleich mit ===
Type Juggling, also das automatische Konvertieren, erfolgt nicht wenn der Identitätsoperator === verwendet wird. Mit === wird nämlich zuerst geprüft, ob die beiden Variablen auch den selben Datentyp haben. Vergleicht man Integer mit Strings, ist dies offensichtlich nie gegeben.
<?php var_dump( 123 === '123', // false 123 === '123a', // false 123 === 'a123', // false 123 === '123.1', // false 123 === '1abc', // false 123 === 'abc', // false 123 === '1a2b3c' // false ); ?>
bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)
4. Vergleich mit > (größer als)
Analog zum Vergleich über den Operator „==” erfolgt die Anwendung von „größer als” (>).
<?php var_dump( 123 > '123', // false 123 > '123a', // false 123 > 'a123', // true 123 > '123.1', // false 123 > '1abc', // true 123 > 'abc', // true 123 > '1a2b3c', // true 123 > '111111a2b3c', // false 123 > '999a' // false ); ?>
bool(false) bool(false) bool(true) bool(false) bool(true) bool(true) bool(true) bool(false) bool(false)