PHP函数返回0 vs false

stu*_*err 3 php

我有一个PHP函数,它返回一个可以为零或更大的数字.例如:

public function returnVal($val1, $val2) {
  if ($val2 > $val1) return $val2 - $val1;
  else return false;
}
Run Code Online (Sandbox Code Playgroud)

这被用作:

if ($diff = $this->returnVal($a, $b)) // do something
else // don't
Run Code Online (Sandbox Code Playgroud)

然而,当差异为零时,我仍然喜欢它做某事,但它似乎将零检测为假而不是零.我仍然需要知道什么时候它是假的.

我尝试将其更改为:

if (($val2 - $val1) == 0) return 'zero';
if ($val2 > $val1) return $val2 - $val1;
else return false;
Run Code Online (Sandbox Code Playgroud)

哪个确实有效,但似乎有点不雅 - 当然必须有更好的方法?

谢谢

sja*_*agr 5

随着if语句里面的变量赋值快捷,PHP采用松散型的比较和类型种子队之类的东西0,null和其他假y值来false.您必须使用显式===!==比较来确保比较具有完全相同的类型(没有类型 - 玩杂耍):

$diff = $this->returnVal($a, $b);
if ($diff !== false) // do something
else // don't
Run Code Online (Sandbox Code Playgroud)

看到此参考用于所有的从使用简单的可能发生的比较条件==,=!=比较.

@MrLlama的替代方案:

if (($diff = $this->returnVal($a, $b)) !== false) // do something
else // don't
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`if(($ var = func($ a,$ b))!== FALSE)`但它不是那么干净. (2认同)