PHP: (int) vs (intval)
ничем вроде
Думаю, раз функцию зачем-то сделали, то разница быть должна.
функция осталась с тех времён, когда прямого typecasting ещё не было
<?php
function tm{
list($usec, $sec) = explode(" ", microtime;
return float)$usec + (float)$sec);
}
for($i=0;$i<65536;$i++){
$str[]='3625';
}
function test1{
global $str;
$start = tm;
for($i=0;$i<65536;$i++){
$g[]=(int)$str[$i];
}
$end = tm;
return $end-$start;
}
function test2{
global $str;
$start = tm;
for($i=0;$i<65536;$i++){
$g[]=intval($str[$i]);
}
$end = tm;
return $end-$start;
}
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache");
header("Cache-Control: post-check=0, pre-check=0");
header("Pragma: no-cache");
$a=$b=0;
print('<table border=1 bordercolor=black><tr><th>(int)<th>intval</tr>');
for($i=0;$i<8;$i++){
$a+=$_1=test1;$b+=$_2=test2;
printf('<tr><td>%.8f<td>%.8f</tr>',$_1,$_2);
}
printf('<tr><td colspan=2 align=center>Average:</tr><tr><td>%.8f<td>%.8f</tr></table>',$a/8,$b/8);
?>
(int) | intval |
0.15108323 | 0.16385388 |
0.15333414 | 0.16355705 |
0.14088511 | 0.16150498 |
0.14476395 | 0.17138195 |
0.15784407 | 0.17810607 |
0.15125895 | 0.16187096 |
0.14709592 | 0.16384697 |
0.14161897 | 0.16743803 |
Average: | |
0.14848554 | 0.16644499 |
ЗЫ: результат заметно не меняется при изменении порядка вызова функций test1 и test2, а также - при многократных повторах тестов.
А в плане выполняемых преобразований - они абсолютно идентичны?
Преобразование в целое
Для несомненного преобразования значения в целое используйте приведение типа (int) или (integer). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует целый аргумент. Вы также можете преобразовать значение в целое при помощи функции intval.
intval -- Get integer value of a variableВзято из php_manual_ru.chm
[u]Description[/u]
int intval ( mixed var [, int base])
Returns the integer value of var, using the specified base for the conversion (the default is base 10).
var may be any scalar type. You cannot use intval on arrays or objects.
Замечание: The base argument for intval has no effect unless the var argument is a string.
Еще есть функция settype, но её стоит использовать только если совсем приспичит: работать она будет, имхо, медленнее чем intval.
Спасибо
Оставить комментарий
erotic
Чем в PHP отличается приведение к типу int от вызова функции intval?( т.е. (int)$a и intval($a) )