Autor Zpráva
jan99
Profil *
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
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.
Při ($x == 0) se $x pokusí převést na číslo. Protože "string" nedává žádné číslo, vezme se 0 a 0==0 je true.

Viz také String conversion to numbers (anglicky, ale ty příklady jsou snad pochopitelné i bez znalosti AJ).
Tori
Profil
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 *
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
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 *
super, díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: