带括号和||的操作顺序

时间:2015-08-07 14:45:33

标签: php

我有一个if条件,由于某种原因,即使有一个空的时间戳(一个空字符串),我的其他条件仍在执行。

if (($limit_by == 0 && $latest_timestamp < $historical_timestamp) || 
    empty($latest_timestamp)) {
    //stuff here
}
else {
    //other stuff
    $year = date("Y", $latest_timestamp);
}

因此,如果$latest_timestamp为空,我仍然偶尔会有其他条件触发器(由于$ latest_timestamp未设置,导致1969日期)。我还尝试了!isset() $ latest_timestamp进行测试,看看是否有帮助。也没有。

是否有一些操作顺序我在这里丢失会导致其他两个条件覆盖空检查?据我所知,他们应该只增加触发条件的项目范围。

3 个答案:

答案 0 :(得分:4)

  

我在这里缺少一些操作顺序会导致其他两个条件覆盖空检查吗?

但您需要验证$latest_timestamp已设置。否则条件$latest_timestamp < $historical_timestamp将始终为真,因为它被强制转换为0。

我建议将isset($latest_timestamp)添加到您的第一个条件中,或者更好的是,通过将第二个条件移到前面来利用short circuit evaluation

if (empty($latest_timestamp) 
    || ($limit_by == 0 && $latest_timestamp < $historical_timestamp))

答案 1 :(得分:1)

我建议你首先检查$latest_timestamp的空虚,然后再检查它是否低于其他时间戳。 `假设与其他时间戳相比,空值将转换为0,我想,您的第一个条件可以评估为true

答案 2 :(得分:0)

尝试使用

进行检查
$latest_timestamp == '0000-00-00 00:00:00'

而不是检查空($ latest_timestamp)。因为默认的空时间戳值为00:00:00&#39;