PHP认为null等于零

在php中, ($myvariable==0)当$ myvariable为零时,expression式的值为true; 当$ myvariable为null时,这个expression式的值也是真的。 我怎样才能排除第二种情况? 我的意思是我希望expression式只有当$ myvariable为零时才是真的。 我当然可以写

 ($myvariable!=null && $myvariable==0 ) 

但有没有其他优雅的方式来做到这一点?

 $myvariable === 0 

阅读更多关于比较运算符 。

你暗示了一个深刻的问题:expression何时应该是真的?

下面,我将解释为什么你在做什么不工作,以及如何解决它。

在许多语言中, null0和空string( "" )都计算为false,这可以使if语句非常简洁和直观,但是null0""也都是不同的types。 他们应该如何比较?

这个页面告诉我们,如果我们有两个variables进行比较,那么variables如下转换(在第一个匹配时退出表格)

 Type of First Type of Second Then null/string string Convert NULL to "", numerical/lexical comparison bool/null anything Convert to bool, FALSE < TRUE 

所以你要比较一个null和一个数字。 因此,null和数字都被转换为布尔值。 这个页面告诉我们,在这种转换中, null0都被认为是FALSE

你的表情现在读取, false==false ,这当然是真的。

但不是你想要的。

这个页面提供了一个PHP的比较操作符列表。

 Example Name Result $a == $b Equal TRUE if $a equals $b after type juggling. $a === $b Identical TRUE if $a equals $b, AND they are of the same type. $a != $b Not equal TRUE if $a not equals $b after type juggling. $a <> $b Not equal TRUE if $a not equals $b after type juggling. $a !== $b Not identical TRUE if $a not equals $b, or they are not of the same type. $a < $b Less than TRUE if $a is strictly less than $b. $a > $b Greater than TRUE if $a is strictly greater than $b. $a <= $b Less than/equal TRUE if $a is less than or equal to $b. $a >= $b Greater than/equal TRUE if $a is greater than or equal to $b. 

第一个比较是你现在使用的比较。 请注意,它执行我前面提到的转换。

使用第二个比较器将解决您的问题。 由于null和数字不是相同的types,所以===比较将返回false,而不是像==运算符那样执行types转换。

希望这可以帮助。

使用php函数is_null()函数和===运算符。 !==也按照您期望的方式工作。

通过以下方式识别为空或零:

  • is_int($var)如果variables是数字或数字string。 要识别零,使用is_numeric($var)也是解决scheme或使用$var === 0

  • is_null($var)如果variables是NULL

尝试($myvariable === 0)这将不会执行types的强制。

第二个解决scheme也不行。 ===运算符是解决您的问题的方法。

 $myvariable===0 $a === $b 

相同如果$ a等于$ b,则它们是相同的types

有一个is_null函数,但是这只会replace你的$myvariable!=null

如果你的零可能是一个string,你也应该考虑检查“零串”

 ($myvariable === 0 || $myvariable === '0') 

我曾经在我的一个项目中遇到过类似的问题,但是我也使用了ZERO值作为我的条件的一个有效值。 这里是我如何解决它使用简单的逻辑来分离NULL和其他值。

  if (gettype($company_id) === 'NULL') { $company = Company::where('id', Auth::user()->company_id)->first(); } else { $company = Company::where('id', $company_id)->first(); } 

对于我的情况,我发现这种营养,它适用于我:

 if ($myvariable == NULL) { codehere... }