在php中,($myvariable==0)
当$ myvariable为零时,表达式的值为true; 当$ myvariable为null时,此表达式的值也为true.如何排除第二种情况?我的意思是我希望只有当$ myvariable为零时表达式才为真.我当然可以写
($myvariable!=null && $myvariable==0 )
Run Code Online (Sandbox Code Playgroud)
但还有其他优雅的方法吗?
Sil*_*ost 86
$myvariable === 0
Run Code Online (Sandbox Code Playgroud)
阅读更多关于比较运算.
Ric*_*ard 12
你暗示了一个深刻的问题:什么时候表达式应该是真的?
下面,我将解释为什么你在做什么不工作以及如何解决它.
在许多语言中null,0和空字符串("")都计算为假,这可以使if语句比较简洁的,直观的,但是null,0和""也都不同的类型.他们应该如何比较?
该页面告诉我们,如果我们有两个变量进行比较,那么变量将按如下方式转换(在第一次匹配时退出表格)
Type of First Type of Second Then
null/string string Convert NULL to "", numerical/lexical comparison
bool/null anything Convert to bool, FALSE < TRUE
Run Code Online (Sandbox Code Playgroud)
所以你要比较一个零和一个数字.因此,null和数字都转换为boolean.本页面告诉我们,在这样的转换都null和0被认为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.
Run Code Online (Sandbox Code Playgroud)
第一个比较器是您现在使用的比较.请注意,它执行我之前提到的转换.
使用第二个比较器将解决您的问题.由于null和数字的类型不同,因此===比较将返回false,而不是像==运算符那样执行类型转换.
希望这可以帮助.
通过以下方式识别为零或零:
is_int($var)如果变量是数字或数字字符串.要识别零,使用is_numeric($var)也是解决方案或使用$var === 0
is_null($var) 如果变量为NULL
| 归档时间: |
|
| 查看次数: |
62426 次 |
| 最近记录: |