Frage zu Typen + Vergleiche
Michael - Hannover
- php
Hallo !
$show_result = 0;
echo $show_result; --> ergibt 0 (Typ Integer würd ich sagen)
if (isset($show_result) and $show_result == 'create_db'){
...
}
die Bedingung liefet WAHR
ich frag mich nur warum, sieht jemand den Fehler ?
Wenn ich das Ganze mit "===" mache klappt es, das würde aber
bedeuten
0 == 'string' ergibt wahr
häh ? =) ich bin verwirrt
MfG
Micha
Hallo Michael!
$show_result = 0;
echo $show_result; --> ergibt 0 (Typ Integer würd ich sagen)
Typ kannst Dir ja auch ausgeben lassen.
Sollte aber ein integer sein, ja.
if (isset($show_result) and $show_result == 'create_db')
die Bedingung liefet WAHR
Vielleicht hilft Dir ja http://de3.php.net/manual/en/types.comparisons.php.
MfG
Götz
Erstmal danke für den Link, kenne zwar php.net aber diese typen Seite ist recht nützlich
leider sieht man dort, dass
der Vergleich
0 == 'string' false ergeben sollte
*grübel*
echo $show_result; --> 0
if (isset($show_result) and $show_result == 25){
...
}
es passiert nix, weil 0 ungleich 25
aber müßte dann nicht auch 0 ungleich 'text' sein ??
ziemlich eigenartige Sache
MfG
Micha
Hi!
echo $show_result; --> 0
if (isset($show_result) and $show_result == 25){
...
}es passiert nix, weil 0 ungleich 25
aber müßte dann nicht auch 0 ungleich 'text' sein ??
ja, aber was hat das mit dem code zu tun?
isset() prüft ob die Variable existiert. Das ergibt immer TRUE wenn die Variable definiert wurde, egal welchen Wert sie enthält(auch 0, FALSE...).
ziemlich eigenartige Sache
nein ;-)
Grüße
Andreas
if (isset($show_result) and $show_result == 25){
da ist ein "and" dazwischen, also theoretisch nur ausführen,
beide Bedingungen "wahr" sind
das Problem ist, dass
ziemlich eigenartige Sache
nein ;-)
doch
..
übrigens
$show_result = 0;
if (isset($show_result) and $show_result != 'create_db')
ergibt "false" - also sind nicht beide Bedingungen wahr
wirkt so, als würde dort statt and OR stehen *grübel*
Hi,
$show_result = 0;
if (isset($show_result) and $show_result != 'create_db')
ergibt "false" - also sind nicht beide Bedingungen wahr
wirkt so, als würde dort statt and OR stehen *grübel*
nein. Bei einem Vergleich mittels == bzw. != ignoriert PHP die Typen und führt eine interne Umwandlung des Strings in, in diesem Fall, einen Integer durch, siehe http://de3.php.net/manual/de/language.types.string.php#language.types.string.conversion.
Was dabei passiert, siehst du, wenn du die Umwandlung mal selbst durchführst:
<?php
echo intval('create_db'); // 0
?>
Also ergibt ($show_result != 'create_db') false (denn es gilt nach der internen Umwandlung des Strings (0 == 'create_db'), und somit wird der ganze Ausdruck false. Wie du schon selbst festgestellt hast, ist bei Vergleichen, in denen es auf die Typen ankommt, === bzw. !== zu verwenden.
Gruß,
Andreas.
Danke !
MfG
Micha
Hi,
Noch ein Nachtrag, hat mich mal verwirrt:
während (wie Andreas schon schrieb)
("test" == 0) zu TRUE evaluiert
wird
("1234test" == 0) zu FALSE.
da PHP aus letzterem (1234 == 0) interpretiert...
Das sind so Seiten an PHP, die ich wirklich nicht mag.
Gruß,
Stefan