PHP (int)和intval()的区别

发布于 2019-12-11  207 次阅读


去php的手册上查并没有查到,索性自己写一篇,可能有些啰嗦,想看结果的直接翻到最下面就行
1、intval & (int) 都不可以转换 Object。
2、转换效率 (int) > intval() > sprintf (intval 是PHP内置的方法,效率相对低)。
3、其他完全相同。
4、输入0123, 0x123 (int)函数也会按八进制和十六进制转换。
测试过程是使用每种方式转换变量$foo 1000000次(100万次),并将各自的消耗时间输出,总共进行三组测试,尽可能降低误差。测试程序如下:
代码如下:
<?php 
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<br />"; 
// intval() 
$fStart = microtime_float(); 
for($i=0;$i<1000000;$i++) 
{ 
$bar = intval($foo); 
} 
$fEnd = microtime_float(); 
print "intval():" . ($fEnd - $fStart) . "s<br />"; 
// sprintf() 
$fStart = microtime_float(); 
for($i=0;$i<1000000;$i++) 
{ 
$bar = sprintf("%d", $foo); 
} 
$fEnd = microtime_float(); 
print "sprintf():" . ($fEnd - $fStart) . "s<br />";

 

  最终的测试结果:
(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,可以看做是无限大。


公交车司机终于在众人的指责中将座位让给了老太太