'a' == 0, das müsste mir mal jemand erklären...
AllesMeins
- php
0 David Tibbe0 AllesMeins0
dedlfix
0 Christian Seiler
Hi,
bräuchte mal jemanden, der sich mit den Innereien von PHP auskennt. Bin gerade zufällig auf eine seltsame Verhaltensweise gestossen, die ich mir beim besten Willen nicht erklären kann.
Ich weiß, das ich dieses Problem mit einem "===" lösen kann, aber trotzdem interessiert mich wie dieses Verhalten intern zustande kommt. Folgender Versuchsaufbau:
$in = 'aberlalal';
$array = array();
$array[] = "Halloe";
$array[] = "Halloe2";
$array[] = "Halloe3";
foreach($array as $key => $wert){
if($in == $key){
echo $in . "==" . $key . "<br />";
break;
}
}
Also ich hätte jetzt erwartet, das dieses Script gar nichts aus gibt. Aber überraschenderweise erfolgt als Ausgabe "aberlalal==0". Kann mir das jemand erklären? Wie kann denn der String "aberlalal" den gleichen Wert wie 0 haben?
Grüße
Marc
Hallo Marc,
liegt an der schwachen Typisierung von PHP. Du Vergleichst einen Integer mit einem String.
Schau dir mal http://de3.php.net/manual/de/types.comparisons.php an, dort findest du ausführlich, was wann wie und wohin gecastet wird.
Grüße
David
Hi,
kann ich irgendwie erzwingen, das beide als String verglichen werden. Das strikte Vergleichen mit === würde ich gerne vermeiden, da $a auf jeden Fall als String ankommt...
Marc
echo $begrüßung;
kann ich irgendwie erzwingen, das beide als String verglichen werden.
Das sollte mit einem Typecast zu hinzubekommen sein.
echo "$verabschiedung $name";
Hallo Marc,
Wie kann denn der String "aberlalal" den gleichen Wert wie 0 haben?
Wenn Du einen String mit einer Zahl vergleichst, wird der String in eine Zahl verwandelt; dies steht in Tabelle 15-5 des PHP-Handbuchs: http://de3.php.net/manual/en/language.operators.comparison.php. Und wie Strings zu Zahlen gewandelt werden, erfährst Du hier: http://de3.php.net/manual/en/language.types.string.php#language.types.string.conversion
Du kannst das Problem übrigens auch ohne === umgehen (=== wird übrigens nicht zwangsläufig funktionieren), wenn Du vorher prüfst, ob $in eine Zahl ist; dazu bietet sich bspw. is_numeric ($in) oder preg_match ('/^\d+$/', $in) oder ähnliches an.
Viele Grüße,
Christian