在php中,($myvariable==0)
当$ myvariable为零时,表达式的值为true;当$ myvariable为null时,此表达式的值也为true。如何排除第二种情况?我的意思是我希望只有当$ myvariable为零时表达式才为真。我当然可以写
($myvariable!=null && $myvariable==0 )
但还有其他优雅的方法吗?
答案 0 :(得分:85)
$myvariable === 0
详细了解comparison operators。
答案 1 :(得分:11)
你暗示了一个深刻的问题:表达式什么时候应该是真的?
下面,我将解释为什么你正在做什么不起作用以及如何来修复它。
在许多语言null
,0
和空字符串(""
)都评估为false,这可以使if
语句非常简洁直观,但{ {1}},null
和0
也都是不同的类型。他们应该如何比较?
This page告诉我们,如果我们有两个变量进行比较,那么变量将按如下方式转换(在第一场比赛时退出表格)
""
所以你要比较一个null和一个数字。因此,null和数字都转换为boolean。 This page告诉我们,在这种转换中,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
都被视为0
。
你的表达现在是FALSE
,当然,这是真的。
但不是你想要的。
This page提供了PHP的比较运算符列表。
false==false
第一个比较器是您现在使用的比较。请注意,它会执行我之前提到的转换。
使用第二个比较器将解决您的问题。由于null和数字的类型不同,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.
比较将返回false,而不是像===
运算符那样执行类型转换。
希望这有帮助。
答案 2 :(得分:6)
通过以下方式识别为零或零:
is_int($var)
如果变量是数字或数字字符串。要识别零,使用is_numeric($var)
也是解决方案或使用$var === 0
is_null($var)
如果变量为NULL
答案 3 :(得分:4)
使用php函数is_null( )函数和===
运算符。 !==
也会以您期望的方式运作。
答案 4 :(得分:3)
尝试不会执行类型强制的($myvariable === 0)
。
答案 5 :(得分:1)
第二种解决方案也不起作用。 ===
operator是您问题的解决方案。
答案 6 :(得分:1)
如果您的零可能是一个字符串,您还应该考虑检查“零字符串”
($myvariable === 0 || $myvariable === '0')
答案 7 :(得分:0)
$myvariable===0
$a === $b
如果$ a等于$ b,则相同为TRUE,且它们属于同一类型
答案 8 :(得分:0)
有一个is_null
功能,但这只会取代您的$myvariable!=null
答案 9 :(得分: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();
}
答案 10 :(得分:-1)
对于我的情况,我发现了这个解决方案,它对我有用:
if ($myvariable == NULL) {
codehere...
}