PHP认为null等于零

时间:2009-11-23 12:08:14

标签: php null

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

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

但还有其他优雅的方法吗?

11 个答案:

答案 0 :(得分:85)

$myvariable === 0

详细了解comparison operators

答案 1 :(得分:11)

你暗示了一个深刻的问题:表达式什么时候应该是真的?

下面,我将解释为什么你正在做什么不起作用以及如何来修复它。

在许多语言null0和空字符串("")都评估为false,这可以使if语句非常简洁直观,但{ {1}},null0也都是不同的类型。他们应该如何比较?

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...
}