Außer dass mir das Konzept, numerische Werte als Zeichenketten zu behandeln recht gruselig erscheint hat es wohl keine Auswirkungen.
Eigentlich sollten Strings immer gleich behandelt werden. Wenn man aber mit viel Phantasie den Inhalt der Zeichenkette als Zahl interpretieren könnte, dann werden die anderes behandelt.
So ist es beispielsweise möglich, statt strmp() zu verwenden, auch einfach 'a'<'b' zu schreiben. Ebenso ist 'aaa'<'ab' möglich.
Beides ist offensichtlich wahr.
Ersetze man die beliebigen Zeichen (a und b) duch andere beliebige Zeichen (0 und 1), so klappt es nicht mehr:
' 100'<' 11' wird nicht als wahr erkannt. Ein Zeichenkettenvergleich würde aber wahr liefern. Sogar wenn man ein Leerzeichen davor macht, wird es als Zahl interpretiert.
Erst eine Alternative Form für Stringvergleiche einführen und dann ist das Ergebnis vom Inhalt abhängig. Entweder der Vergleich funktioniert für alle Strings gleich oder man sollte das Ding komplett verbieten.
Irgendwann treiben mich diese automatischen Typkonvertierungen in den Wahnsinn.
Wenigstens einen Unterschied hab ich grad doch noch gefunden:
PHP-Code:
<?php
$a = '1234';
echo "a[2]: $a[2]
\n";
$b = 1234;
echo "b[2]: $b[2]
\n";
?>
Als Ausgabe kommt im ersten Fall wie erwartet 3, während im zweiten Fall keine Ausgabe erfolgt.
Warum allerdings keine Notice kommt, obwohl$b kein Array ist, bleibt mir momentan ein Rätsel. error_reporting(E_ALL) steht natürlich davor.
Ich bin immer weider 'begeistert', welche 'Features' da in PHP enthalten sind.