既然PHP是一种动态语言,那么检查所提供字段是否为空的最佳方法是什么?

我要确保:

Null被认为是空字符串 只有空格的字符串被认为是空的 那个“0”不是空的

这是我目前得到的:

$question = trim($_POST['question']);

if ("" === "$question") {
    // Handle error here
}

一定有更简单的方法吧?


当前回答

旧帖子,但有人可能会像我一样需要它;)

if (strlen($str) == 0){
do what ever
}

用变量替换$str。 NULL和""在使用strlen时都返回0。

其他回答

旧帖子,但有人可能会像我一样需要它;)

if (strlen($str) == 0){
do what ever
}

用变量替换$str。 NULL和""在使用strlen时都返回0。

小心来自trim()函数的错误否定——它在修剪之前执行强制转换为字符串,因此将返回例如。数组,如果你传递给它一个空数组。这可能不是问题,这取决于您如何处理数据,但是对于您提供的代码,可以在POST数据中提供一个名为question[]的字段,并且看起来是非空字符串。相反,我建议:

$question = $_POST['question'];

if (!is_string || ($question = trim($question))) {
    // Handle error here
}

// If $question was a string, it will have been trimmed by this point

用这个:

// check for null or empty
if (empty($var)) {
    ...
}
else {
    ...
}

使用PHP的empty()函数。以下的东西被认为是空的

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)

有关详细信息,请检查空函数

Empty()曾经为此工作,但Empty()的行为已经改变了几次。与往常一样,php文档始终是准确行为的最佳来源,这些页面上的注释通常提供了随时间变化的良好历史记录。如果你想检查对象属性的缺乏,目前一个非常防御性的方法是:

if (is_object($theObject) && (count(get_object_vars($theObject)) > 0)) {