什么';s php中$bar=boolval($foo)和$bar=(bool)$foo之间的区别


What's the difference between $bar = boolval($foo) and $bar = (bool) $foo in php?

intval/(int)floatval/(float)等相同。

据我所知,两者都没有更改原始变量,而且都返回了casted版本。它们的功能似乎完全相同。

是否存在存在差异的边缘情况?

有什么理由使用其中一个而不是另一个吗?

最佳实践?

我假设(bool)"更好",因为我认为它可能比内部可能只做同样事情的函数调用更快。如果是这样的话,这些boolval/intval/floatval函数有什么意义?

在大多数情况下,它们是相同的,但也有细微的差异:

  • 一些函数(如intval)接受第二个参数($base),而强制转换语法不接受该参数
  • 函数调用的开销稍大
  • 函数可以用作回调(例如array_map('intval', ..)),这在强制转换语法中是不可能的

使用boolval(bool)在以下情况下有差异:如果你需要返回bool并且有两个int:

  • return 1 & 1-返回int
  • return (bool) 1 & 1-抛出错误(使用strict_types)
  • return (bool) (1 & 1)-返回布尔
  • return boolval(1 & 1)-返回布尔