去php的手册上查并没有查到,索性自己写一篇,可能有些啰嗦,想看结果的直接翻到最下面就行
1、intval & (int) 都不可以转换 Object。
2、转换效率 (int) > intval() > sprintf (intval 是PHP内置的方法,效率相对低)。
3、其他完全相同。
4、输入0123, 0x123 (int)函数也会按八进制和十六进制转换。
测试过程是使用每种方式转换变量$foo 1000000次(100万次),并将各自的消耗时间输出,总共进行三组测试,尽可能降低误差。测试程序如下:
代码如下:
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$foo = "1';Select * ...";
// (int)
$fStart = microtime_float();
for($i=0;$i<1000000;$i++)
{
$bar = (int)$foo;
}
$fEnd = microtime_float();
print "(int):" . ($fEnd - $fStart) . "s
";
// intval()
$fStart = microtime_float();
for($i=0;$i<1000000;$i++)
{
$bar = intval($foo);
}
$fEnd = microtime_float();
print "intval():" . ($fEnd - $fStart) . "s
";
// sprintf()
$fStart = microtime_float();
for($i=0;$i<1000000;$i++)
{
$bar = sprintf("%d", $foo);
}
$fEnd = microtime_float();
print "sprintf():" . ($fEnd - $fStart) . "s
";
最终的测试结果:
(int):0.67205619812012s
intval():1.1603000164032s
sprintf():2.1068270206451s
(int):0.66051411628723s
intval():1.1493890285492s
sprintf():2.1008238792419s
(int):0.66878795623779s
intval():1.1613430976868s
sprintf():2.0976209640503s
虽然这个测试有点变态(谁会连续转换100w次的整数?),但是由此可以看出,使用强制类型转换将字符串转化为整数速度是最快的。
接下来讲为什么int效率会大于intval()
1.intval()为内置函数,int为语言结构,使用intval还需要底层一层转换所消耗的时间
2.intval()的整数化需要依据于计算机架构为x32还是x64,所以如果有两台服务器cpu位数不一样有可能会产生两个结果,并且有最大值限制
3.int整数化是将数字转换为二进制,存储数字没有大小限制,并且两种cpu结果为一致,
需要知道的是即使如此x64的cpu理论上计算数据会比x32的cpu快一倍,因为数据宽度有区别.一个32位整数可以表示2的32次方也就是4GB的数值,而一个64位整数,即2的64次方也就是1800万TB,可以看做是无限大。