(int)php_PHP (int)和intval()的区别

去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,可以看做是无限大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值