【问题标题】:Failing empty check空检查失败
【发布时间】:2015-10-27 05:12:51
【问题描述】:

我有这样的简单 PHP 代码

$revenue = $this->dailyCounts['revenue'][$date]['net_revenue'] + (!empty($activity[$date]) ? $activity[$date] : 0) * 1000;

但是,当$activity 变量为NULL 时,即使我正在检查是否为空,它也会始终显示警告。我在一个循环中运行它,当$activity 具有空值时,它总是显示undefined index

【问题讨论】:

    标签: php null


    【解决方案1】:

    在这种情况下,使用 isset 而不是 empty 不会解决任何问题。

    如果变量不存在,则不会生成警告。这意味着 empty() 本质上等同于 !isset($var) || $var == false。

    http://php.net/manual/en/function.empty.php

    我猜这个通知来自 $this->dailyCounts['revenue'][$date]['net_revenue']

    【讨论】:

    • 不,不是。当我添加 isset() 检查时,它已经消失了。我在 Laravel 5 中使用它
    • @HappyCoder:你能粘贴你的固定代码吗?这表明两者都不会产生警告并给出相同的结果:codepad.org/HjgrZ3RZ
    【解决方案2】:

    使用isset() 而不是empty()

    (!isset($activity[$date])
    

    empty() 会直接检查值,但isset() 会查看索引是否存在。

    有关更多信息,请参阅thisthis,它的解释很好。

    【讨论】:

    • 使用 null 数组,isset!empty 给出相同的结果
    【解决方案3】:

    试试这个:

    $revenue = $this->dailyCounts['revenue'][$date]['net_revenue'] + ((isset($activity[$date]) && !empty($activity[$date])) ? $activity[$date] : 0) * 1000;
    

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多