【问题标题】:Type juggling - Ressource to boolean类型杂耍 - 资源为布尔值
【发布时间】:2014-01-22 13:24:40
【问题描述】:

我偶然发现了这段代码(由其他人编写):

$result = do_stuff(); //returns false on failure, and mysql resource on success

return $result !== false;

如果我做对了,它会将$result 转换为布尔值并返回它。

我们如何证明使用$result !== false 而不是(bool)$result 是合理的?前者效率更高吗?

【问题讨论】:

  • 我认为$result !== false(bool)$result 更具可读性。
  • 因为资源不是简单的真或假,这里的代码是主动类型检查布尔值以及假值
  • @MarkBaker From php doc Every other value is considered TRUE (including any resource). 在投射时资源被认为是真的,对吧?
  • 这是tru-ishtrue的区别

标签: php type-conversion


【解决方案1】:

我不确定你所说的证明是什么意思。根据do_stuff() 的结果,转换为 bool 可能会做同样的事情,但实际上是别的东西,也暗示着别的东西。

示例:
如果你有 0 作为返回值,转换为 bool 将使你的函数返回 false,但 0 !== false 将返回 true。根据您的评论,这可能不是您在此处使用的用例,但它是隐含的。

所以你在这里说的是“如果$result 恰好是false,则返回false,否则总是返回true”,而转换为bool 将在$result 的任何值上返回false,即'false-ish' .

我的理由是这更清楚:你暗示结果要么真的是false,要么你实际上认为它是真的。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2016-01-10
    • 2011-08-29
    • 1970-01-01
    • 2021-07-29
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多