刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别

intVal($str) 跟 (int) $str 都是把其他类型的变量转化为int型变量的方式,这么多年来我一直森森滴怀疑它们的运算结果在某些条件下会有区别。对于我的疑问,文档里也没有多说(或者我没找到),还是做个实验验证一下吧。

除了intVal函数的第二个参数可以指定$str字符串的进制形式外,对于普通的10进制数字型字符,这两种方式有什么样的区别呢?

小实验:

$arr = array(
        '$a' => 19,
        '$b' => 19.99,
        '$c' => '19.99',
        '$d' => '',
        '$d' => 'sfsdf',
        '$f' => '0x20',
        '$e' => array('19.99')
);

foreach ($arr as $k => $v){
    $v = intval($v);
    echo "intval({$v}) is :" , var_dump($v) , PHP_EOL;
}
echo '-----------------------', PHP_EOL;
foreach ($arr as $k => $v){
    $v = (int)($v);
    echo "intval({$v}) is :" , var_dump($v) , PHP_EOL;
}
die();


输出结果:

intval(19) is :int(19)

intval(19) is :int(19)

intval(19) is :int(19)

intval(0) is :int(0)

intval(0) is :int(0)

intval(1) is :int(1)

-----------------------
intval(19) is :int(19)

intval(19) is :int(19)

intval(19) is :int(19)

intval(0) is :int(0)

intval(0) is :int(0)

intval(1) is :int(1)

实验分析:输出的结果有两个值得注意的地方,第一,他们的结果完全一致;第二,非空会被转化为1,空会被转为0。

实验结论:

输出结果没啥区别,但intval()毕竟是要有函数调用的,所以相比较而言会慢那么一丢丢。


课外题:

$v = intval($v);

改成

$v = intval($v * 100);

试一下,会有什么惊喜?!



另外,举一反三,其他的类型转换方式会不会有相同的答案呢?试一下吧!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值