Autor | Zpráva | ||
---|---|---|---|
jan99 Profil * |
#1 · Zasláno: 1. 3. 2012, 12:02:01
Ahoj, vysvetli mi nekdo proc $x==0 vrati true ikdyz se nerovna?? $x==1, $x==2 .. uz vraci false
<?php $x = 'string'; var_dump($x, is_string($x), $x==0, gettype($x)); ?> vysledek: string 'string' (length=6) boolean true boolean true string 'string' (length=6) diky |
||
Joker Profil |
#2 · Zasláno: 1. 3. 2012, 12:11:36
jan99:
PHP automaticky přetypovává proměnné. Řetězec se na číslo konvertuje tak, že se z něj pokusí nějaké číslo dostat, jinak je 0. $a = "3 uživatelé navštívili toto téma"; $b = $a + 1; // $b =4, $a konvertováno na číslo 3 $a = "jan99"; $b = $a + 1; // $b = 1, na začátku $a není číslo, tak se bere jako 0. Viz také String conversion to numbers (anglicky, ale ty příklady jsou snad pochopitelné i bez znalosti AJ). |
||
Tori Profil |
#3 · Zasláno: 1. 3. 2012, 12:12:33
Při porovnávání řetězce s číslem se řetězec nejdřív konvertuje na číslo. "string" => 0. Např.
("1string" == 0) by už bylo false, protože řetězec "1string" by se změnil na 1. Viz http://cz.php.net/manual/en/language.types.string.php#language.types.string.conversion
|
||
nightfish_ Profil * |
#4 · Zasláno: 1. 3. 2012, 12:13:00
při porovnání řetězce a čísla dojde k implicitnímu přetypování řetězce na číslo
echo (int)'string'; // vypíše 0 |
||
Jan Tvrdík Profil |
#5 · Zasláno: 1. 3. 2012, 12:23:03
Pokud chceš provést porovnání včetně typu proměnné, musíš použít
=== .
$s = 'foo'; var_dump($s === 0); // vypíše FALSE |
||
jan99 Profil * |
#6 · Zasláno: 1. 3. 2012, 22:49:01
super, díky
|
||
Časová prodleva: 12 let
|
0