Das ist zwar alles etwas OT, aber sei's drum, denn eigentlich ist es logisch:
Zitat von Uwe81 |
Denn warum "0" == 0 ist, ist mir noch klar, aber warum in der tat für jeden string string == 0 ist verstehe ich nicht. |
Es war einmal vor langer Zeit ein Compiler. Wenn man dort mit Hilfe der mitgelieferten Systembibliothek (Neudeutsch: Library) aus einer Zeichenkette eine Zahl extrahieren wollte, so wurde aus
"0123test" vielleicht nicht ganz logisch, aber verständlich und bequem für den Programmierer
123. Und in der Konsequenz wurde das Ergebnis einer Zeichenkette, die keine Ziffern am Anfang enthielt,
0.
Die Entwickler von PHP haben das wohl übernommen, denn in der Konsequenz geht folgendes:
[php]
<?php
$testString1 = "0123test";
$testString2 = "test0123";
echo "\$testString1 == 123 => " . (($testString1 == 123) ? "True" : "False") . "\n";
echo "\$testString2 == 123 => " . (($testString2 == 123) ? "True" : "False") . "\n";
?>
[/php]
Die Ausgabe ist dann auch wie in
diesem Kontext erwartet:
hd@lan:~> php -f test.php
$testString1 == 123 => True
$testString2 == 123 => False
hd@lan:~>
Dieser völlig verwahrloste Umgang mit Datentypen hat dann einige Entwickler wohl dazu getrieben, zumindest Elemente in die Sprache zu bringen, die Typenschärfe zeigen, wenn sie schon nicht strenge Typen insgesamt durchsetzen können. Und so entstanden dann eben die (imho) sehr hilfreichen Operatoren
=== und
!==.
Zitat von hauptmann |
(mir fiele aber kein konkreter Anwendungsfall ein) |
Nun, PHP ist eine Skriptsprache, bei der man es mit Typen nicht so genau nimmt. Warum auch? Es geht doch darum, schnell einen Batch
On The Fly zu erledigen. Und die mit PHP zusammengeschraubte Web-Site nutzt intensiv Zeichenketten, vor allem aus dem Array
$_REQUEST. Da ich mal davon gehört habe, dass es sinnvoll sein könnte, Variablen aus diesem Array einer etwas gründlicheren Prüfung zu unterziehen (keine Ahnung, wieso eigentlich), bleibt einem kaum eine Funktion wie
strpos erspart. Die liefert aber
$needle aus dem Heuhaufen als 0-basierten Index und
FALSE wenn der Heuhaufen doch nicht pikt. Und ich könnte mir vorstellen, dass die Erkennung einer Zeichenkette wie
"; DROP TABLE ..." durchaus für den einen oder anderen von einem gewissen, wenngleich untergeordnetem Interesse sein könnte...
Zitat von hauptmann |
In C# und sonstigen streng typisierten Sprachen ist so ein Operator eh überflüssig. |
Eben.