Mailinglisten-Archive |
Hi Michael,
Michael Borchers schrieb:
> <?php
> function is_foo($x)
> {
> if($x != "foo")
> {
> $re = "IST NICHT foo";
> }
> else
> {
> $re = "IST foo!";
> }
>
> return $re;
> }
>
> echo "0: " . is_foo(0) . "<br>";
> echo "foo: " . is_foo("foo") . "<br>";
> echo "bar: " . is_foo("bar") . "<br>";
> ?>
>
> Ausgabe:
> 0: IST foo!
> foo: IST foo!
> bar: IST NICHT foo
>
> warum ist 0 = foo?!
die Antwort ist: Es liegt am Typejuggling von PHP. :-)
Übergibst Du den Integer 0 und vergleichst ihn mittels != mit "foo", wird
der Integer-Wert von "foo" gebildet (vgl. intval("foo")), welcher gleich
ist 0. Da 0 gleich 0 ist, ist die Bedingung erfüllt.
Die Lösung: Mache Deine if-Bedingung typenfest. Das sieht so aus:
if($x !== "foo")
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive