PHP: 如何检查一个字段是否为空或NULL值?

3
我希望在变量具有空值、空字符串或null值时显示错误。例如,变量如下所示:
 $mo = strtotime($_POST['MondayOpen']);

并且
var_dump($_POST['MondayOpen']) 返回 string(0) "".

现在我采用以下方法:

  1. 首先想找出变量$mo是哪种类型?(字符串、整数或其他)

  2. 哪个函数更好地查找$mo没有值。

我对$mo进行了测试,并得到了这些结果。

is_int($mo);//--Return nothing
is_string($mo); //--Return bool(false) 
var_dump($mo);  //--Return bool(true)                   
var_dump(empty($mo));//--Return bool(true) 
var_dump($mo==NULL);//--Return bool(true) 
var_dump($mo=='');//--Return nothing

请提出一种最佳和正确的方法来检查变量的完整性。

1
顺便提一下,你正在使用 == 进行相等性测试,例如 1 == '1',这将评估为 true。但是当你使用 === 时,它会测试类型是否相等。在我的例子中,1 === '1' 将返回 false,因为 int 不是 String - Anthony Forloney
4个回答

4

var_dump输出变量以进行调试,它不用于在正常代码中检查值。PHP是弱类型语言,大多数情况下,无论您的变量是字符串还是整数,都没有关系,尽管如果需要确保它是一个,则可以将其转换,或使用is_函数进行检查。

要测试某个东西是否为空:

if ( empty( $mo ) ) {
  // error
}

empty()函数会在变量为0、null、false或空字符串时返回true。


3

如果无法将字符串转换为时间戳,使用strtotime函数会返回false。

$mo = strtotime($_POST['MondayOpen']);
if ($mo !== false)
{
//valid date was passed in  and $mo is type int
}
else
{
//invalid date let the user know
}

3
PHP提供了一个函数isset来检查变量是否不为NULL,以及empty来检查变量是否为空。要返回类型,可以使用PHP函数gettype
if (!isset($mo) || is_empty($mo)) {
 // $mo is either NULL or empty.
 // display error message
 }

如果(!isset($mo) || empty($mo))是多余的。 if (empty($mo))具有相同的行为。 - goat
"empty($var)" 函数的问题在于将 $var="0" 视为空。这显然是不正确的。 - Olivier

0

您可以使用以下代码检查其类型:

gettype($mo);

但是nullempty是不同的东西,你可以使用以下函数进行检查:

if (empty($mo))
{
  // it is empty
}

if (is_null($mo))
{
  // it is null
}

检查变量是否已设置的另一种方法是使用 isset 结构。

if (isset($mo))
{
  // variable has been set
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接