PHP类型转换

33

我在想最佳的类型转换方法是什么。

我们应该使用哪种变体:

  1. intval($value);
  2. settype($value, 'int')
  3. (int)$value

它们都会产生相同的结果。

4个回答

34
(int)$value

intval($value)settype($value, 'int') 相比,使用 (int)$value 可以减少一个函数调用。

而且,(int)$value 很简洁,所以我更喜欢这种方式。

当你需要使用 intval($value) 时,是因为你需要使用指定的基数进行转换(默认是10进制)。intval 接受第二个参数来指定转换的基数。


7
这里的答案是使用你认为“更清晰”的方式。任何速度上的差异都非常微小,担心这个几乎肯定比你可能节省的时间更多。但能节约时间的是在将来能够阅读和理解代码。
有一篇关于这个问题的优秀文章在 Coding Horror 上进行了解释。

6

(int)$value 比其他方式更快。


15
更快 - zerkms
4
是的,我已经测试了1000万次所有的方法,并得到以下结果:int() $value - 2.7695989608765秒;intval($value) - 5.8383219242096秒;settype($value, 'int') - 8.035208940506秒。在PHP中调用函数是昂贵的。 - Igor Evstratov
6
我同意这样做更快,但当你的代码中有一千万个转换时,你会比只是决定使用函数或类型提示时遇到更糟糕的麻烦。因此,在实际应用中,这种差异根本不重要(对于数十万次来说几乎可以忽略不计)。 - zerkms
1
将您的基准比较编辑到您的答案中似乎是一个明智的行动。 - mickmackusa

2

它可能取决于您要转换的类型。PHP已经设计成可以在运行时转换类型。如果必要,它可以将字符串“5”转换为整数值5或浮点数5.0。这只是PHP的自然类型转换,但是有方法可以强制实现类似的行为。

在许多情况下,intval() 实际上比(int) 强制转换更快,特别是在将字符串转换为整数时。但是,由于我也编写C ++,因此我个人使用类型转换,因为我认为它更自然和整洁。然而,在不同情况下,结果略有不同。我从未想过 settype() 有什么前途。


如果类型是动态的,唯一的方法就是使用settype。 - meze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接