检查大于零的值时,此代码是否冗余?

时间:2009-11-12 04:12:36

标签: php

if(($slcustom48 != 0) && ($slcustom48 != NULL)) {
// do something
} else {
// do something else
}

6 个答案:

答案 0 :(得分:3)

你的代码甚至不检查一个值是否大于0,这是你的问题,所以没有。我的回答是否定的。这不是多余的。这不对。

答案 1 :(得分:2)

首先,marcc是正确的:您的代码不会检查变量是否包含大于零的值。它只是测试变量是否为零(可以是负数,也可以是字符串或对象等)。

因此扩展了这个想法:你没有检查变量是否包含整数。 你要检查的是变量是否保持一个值,使用!= NULL。但是你在if条件下的顺序是错误的。原因如下:

要防止在错误日志中出现通知(或出现在测试服务器的屏幕上),您需要在检查其他任何内容之前检查该变量是否包含任何内容。只要返回false,PHP就会停止解释条件。这也可以使用PHP的isset()或者确实使用!= NULL来完成。

接下来,您需要确保该变量包含一个整数(如果这对您很重要,我认为这对您来说很重要)。

最后,您要检查变量的值是否大于零。所以,总结一下,这就是你所需要的:

if( isset( $slcustom48 ) && is_int( $slcustom48 ) && $slcustom48 > 0 )
{
    // the variable indeed holds an integer larger than zero
}

答案 2 :(得分:1)

>>> $foo = NULL
>>> $foo != 0
false
>>> $foo == 0
true

PHP将带有NULL值的变量视为带0运算符的整数==,因此NULL检查确实是多余的。

答案 3 :(得分:1)

$slcustom48=(bool)$slcustom48;

if($slcustom48) 
{

// do something

} 
else 
{

// do something else

}

答案 4 :(得分:0)

$slcustom48 = (int)$slcustom48;
if ($slcustom48) { // will be better and don't allow $slcustom48 be == 0.

您的测试将通过“123”传递; DROP TABLE myTable--“:)

$slcustom48 = (int)$slcustom48;
if ($slcustom48 > 0) { // even better

答案 5 :(得分:0)

Filter_var很容易做到这一点......

if (filter_var($slcustom48, FILTER_VALIDATE_INT)) {
    // do your stuff here
} else {
    // error out
}