phpbar.de logo

Mailinglisten-Archive

[php] foo ist nicht gleich foo!?

[php] foo ist nicht gleich foo!?

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Aug 29 14:28:30 CEST 2006


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