PHP 是否设置了一个值而不是另一个

PHP Is one value set and not another

我正在处理 truthy/falsy,我需要在其中检查 2 个值,其中一个可能为空,另一个可能为 0。如果整数值与字符串值相同,则它们是相同的。 我能够分解的最简单的是:

if($var1 == $var2) {// They may be the same
  if((isset($var1) && !isset($var2)) || (!isset($var1) && isset($var2))) { // Is one set, and not the other?
     return true; // As different as we'll allow
  }
  return false;   // Nope they're the same
}
return true;      // Definitely different

我的问题主要是,鉴于上面的代码块,是否有更简单的方法来检查是否设置了一个值,而不是另一个?

编辑:我首先检查相等性的原因是该值可能通过 1 == 10 或 10 == '10',在这种情况下,我不需要进一步检查,但如果 null = = 0,这将通过并需要进一步检查。我看到我可以将多个值传递给 isset,如果我需要两者都设置或两者都不设置,这将起作用,但如果一个是,而不是另一个,那就是我需要标记的地方。

您正在检查是否相等之前检查它们是否已设置。

我建议先检查它们是否已设置。

如果 PURE 目标是检查是否设置了一个而不是另一个,则:

return ( ( empty($var1) && ! empty($var2) ) || ( ! empty($var1) && empty($var2) );

根据评论,isset 是要求,因此此版本:

return ( ( isset($var1) && ! isset($var2) ) || ( ! isset($var1) && isset($var2) );

并且,支持@deceze 建议一个更简单的版本:

return ( isset($var1) != isset($var2) );

使用空合并运算符可能会派上用场...

return ($var1 ?? null) !== ($var2 ?? null);

检查它们是否不相等,并且至少有一个已定义且不为空。