【问题标题】:Is is the Boolean result of !empty($variable) and count($variable) always equal in PHP?!empty($variable) 和 count($variable) 在 PHP 中的布尔结果是否总是相等?
【发布时间】:2020-03-10 05:22:17
【问题描述】:

我需要替换出现的 IF 语句中的 count($variable) 和 !empty($variable) 所以而不是

if(count($variable)){

}

我想使用

if(!empty($variable)){

}

在确保结果始终相同的同时始终替换它是否安全?

【问题讨论】:

标签: php count php-7 php-5.6 is-empty


【解决方案1】:

如果您当前使用的 count() 不依赖于非标准情况,则替换它是安全的,例如: count(false)(这将返回 1)

如果你只是计算数组,你应该很高兴。

【讨论】:

    【解决方案2】:

    Test it:

    foreach (['', null, 0, 0.0, '0', false, [], new stdClass, 'foo', 1, true, ['bar' => 'baz']] as $val) {
        var_dump($val, count($val), !empty($val));
        echo '-------------', PHP_EOL;
    }
    

    这些情况有所不同:

    string(0) ""
    int(1)
    bool(false)
    -------------
    int(0)
    int(1)
    bool(false)
    -------------
    float(0)
    int(1)
    bool(false)
    -------------
    string(1) "0"
    int(1)
    bool(false)
    -------------
    bool(false)
    int(1)
    bool(false)
    

    此外,count 将触发未定义变量的错误。在 PHP 7.2+ 上,count 也会触发任何非Countable 值的错误(基本上除了arrayimplement Countable 的类之外的所有值)。

    所以,如果你可以保证你的变量永远是一个数组,没有区别。如果您的变量可以是数组以外的任何内容,包括未定义的,那么您将看到不同结果和触发错误之间的任何地方。

    如果你希望你的变量存在并且是一个数组/Countable,你应该更喜欢count或者只是if ($variable)(因为一个空数组也是falsy)如果您的值违反了您的期望,则会出现错误消息。

    【讨论】:

    • 值得一提的是,对数组中的元素进行计数以获取布尔值是一种矫枉过正的做法。数组可以在布尔上下文中使用而不计算元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多