Spotykam się z tym problemem po raz pierwszy, rozłożyłem już nawet short-ifa na kawałki i nadal dostaję bzdurę:
$x="***ANY***"; $y = (int)$x; $z = $x."";
Wynik:
Kod
bool(true) int(0) string(9) "***ANY***"
Co on u diaska robi, że wychodzi mu true?

$x="***ANY***"; $y = (int)$x; $z = $x."";
$x="***ANY***"; $y = (string)(int)$x; $z = (string)$x.""; //I foma docelowa-skrócona: $result = ((string)(int)$x === (string)$x.""));
A jeżeli już tak bardzo zależy Ci na tym by sprawdzić czy w $_GET['zmienna'] pierwotnie była liczba całkowita z zakresu 0 - 9 to dodaj sobie przed pierwszym IFem
$zmienna = (int) $_GET['zmienna']; if ($zmienna < 0 || $zmienna > 9) { } // dane w $zmienna są na 100% bezpieczne
Chociaż celowość czegoś takiego jest raczej znikoma.
if ($_GET['zmienna'] !== (string) (int) $_GET['zmienna']) { }
Oba warunki sprawdzą czy Ci przesłano coś co jest cyfrą arabską.
// jest poprawna } ---------------------- $zmienna = (int) $_GET['zmienna']; if ($zmienna >= 0 && $zmienna <= 9 && $zmienna == $_GET['zmienna']) { // jest poprawna }
<?php function c1($x) { return ((string)(int)$x === (string)$x.""); } function c2($x) { } for($i=0;$i <= 1000000;$i++) { } for($i=0;$i <= 1000000;$i++) { } ?>
Sprawdzi Ci czy przesłane dane do liczba arabska (z uwzględnieniem minusa).
$_GET['zmienna'] == (int) $_GET['zmienna']