Php 带括号和||

Php 带括号和||,php,Php,我有一个if条件,出于某种原因,即使时间戳为空(一个空字符串),else条件仍在执行 if (($limit_by == 0 && $latest_timestamp < $historical_timestamp) || empty($latest_timestamp)) { //stuff here } else { //other stuff $year = date("Y", $latest_timestamp); } if($l

我有一个if条件,出于某种原因,即使时间戳为空(一个空字符串),else条件仍在执行

if (($limit_by == 0 && $latest_timestamp < $historical_timestamp) || 
    empty($latest_timestamp)) {
    //stuff here
}
else {
    //other stuff
    $year = date("Y", $latest_timestamp);
}
if($limit_by==0&&$latest_timestamp<$historical_timestamp)|
空($latest_timestamp)){
//这里的东西
}
否则{
//其他东西
$year=日期(“Y”,$latest_时间戳);
}
因此,如果
$latest\u timestamp
为空,我仍然偶尔会触发else条件(这会导致1969个日期,因为$latest\u timestamp未设置)。我也试过
!isset()
获取$latest_时间戳以进行测试,并查看这是否有帮助。也没有

我这里缺少的操作顺序会导致其他两个条件覆盖空检查吗?据我所知,他们应该只增加触发条件的项目范围

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

否。

但是,您需要验证是否设置了
$latest_timestamp
。否则,条件
$latest\u timestamp<$historical\u timestamp
在强制转换为0时将始终为真

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

if (empty($latest_timestamp) 
    || ($limit_by == 0 && $latest_timestamp < $historical_timestamp))
if(空($latest_timestamp)
||($limit_by==0&&$latest_timestamp<$historical_timestamp))
我这里缺少的操作顺序会导致其他两个条件覆盖空检查吗

否。

但是,您需要验证是否设置了
$latest_timestamp
。否则,条件
$latest\u timestamp<$historical\u timestamp
在强制转换为0时将始终为真

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

if (empty($latest_timestamp) 
    || ($limit_by == 0 && $latest_timestamp < $historical_timestamp))
if(空($latest_timestamp)
||($limit_by==0&&$latest_timestamp<$historical_timestamp))
尝试使用

$latest_timestamp == '0000-00-00 00:00:00'
而不是检查空($latest_timestamp)。因为默认的空时间戳值是“0000-00-00 00:00:00”

请尝试检查

$latest_timestamp == '0000-00-00 00:00:00'

而不是检查空($latest_timestamp)。因为默认的空时间戳值是“0000-00-00 00:00:00”

我建议您首先检查
$latest\u timestamp
的空值,然后再检查它是否小于其他时间戳`因为与其他时间戳比较的空值将转换为0,我想,您的第一个条件可以计算为
true

我建议您首先检查
$latest\u timestamp
的空值,然后-检查它是否小于其他时间戳`因为与其他时间戳相比,空值将被转换为0,我想,如果逻辑表达式显示为
false,则第一个条件可以被计算为
true

您的
。没有人能告诉您原因,除非您转储该表达式变量的值,否则无法复制。“即使时间戳为空”-根据什么,db相关?这可能与您将什么定义为空、空或其他什么有关。时间戳的默认值(以DB为单位)为NULL
=空。你不能简单地计算出
latest\u timestamp
和所有其他变量的值吗?这比陌生人在互联网上猜测要容易得多。你的时间戳是什么格式的?它是一种格式还是其中一种格式?空是一个相对的术语。空时间戳可以像下面描述的@ArunKrish一样,也可以是空字符串,也可以像上面提到的@Fred ii一样是
NULL
如果逻辑表达式显示为
false
。没有人能告诉您原因,除非您转储该表达式变量的值,否则无法复制。“即使时间戳为空”-根据什么,db相关?这可能与您将什么定义为空、空或其他什么有关。时间戳的默认值(以DB为单位)为NULL
=空。你不能简单地计算出
latest\u timestamp
和所有其他变量的值吗?这比陌生人在互联网上猜测要容易得多。你的时间戳是什么格式的?它是一种格式还是其中一种格式?空是一个相对的术语。空时间戳可以像下面描述的@ArunKrish一样,也可以是空字符串,也可以像上面提到的@Fred ii一样是
NULL
。。将空检查切换到第一个条件使其工作。这是有道理的。是的,在第一个条件中添加
isset()
,或者交换顺序也可以做同样的事情。但是,请务必阅读短路评估链接以了解原因。我认为在
statement@War10ck,我不能不知道他们的确切输入。无论如何,当
$latest\u timestamp
为空时,此顺序可以更好地传达意图并防止大于比较。这很公平。无论如何,这样做肯定更有意义。谢谢分享+1将空支票切换到第一个条件使其工作。这是有道理的。是的,在第一个条件中添加
isset()
,或者交换顺序也可以做同样的事情。但是,请务必阅读短路评估链接以了解原因。我认为在
statement@War10ck,我不能不知道他们的确切输入。无论如何,当
$latest\u timestamp
为空时,此顺序可以更好地传达意图并防止大于比较。这很公平。无论如何,这样做肯定更有意义。谢谢分享。