PHP如何解释JavaScript的Null值?

3

假设我们向一个PHP文件发送了一个POST请求,其中包含...&title=title的查询参数,其中title的值为title=$(#title).val();(假设我们正在使用Jquery)。在PHP中,我们有$title=$_POST['title'];。假设title为空,那么PHP会将null视为字符串还是空字符串?


空值到处都是空值,不是吗? - aiternal
@xy_: 在 PHP 中,除了实际的“值”NULL之外,您无法判断变量是否为空。尝试使用任何其他类似于 null 的值将导致得到一个空字符串。 - Martijn
2
title 不会为空,val() 总是返回一个字符串(假设你已经选择了一个输入)。 - Quentin
那么你只需不为标题编写任何内容, 它会给出未定义,但PHP如何理解未定义? $title会获得“未定义”字符串作为值吗? - Aymane Shuichi
我认为你是指“解释”,而不是“编译”。 - Dave
是的,很抱歉,我忘了那个词! - Aymane Shuichi
4个回答

4

来自PHP手册

NULL表示一个没有值的变量。NULL是唯一可能的NULL类型的值。

如果一个变量满足以下条件,则被认为是NULL

  • 它被赋予了常量NULL
  • 它尚未被设置为任何值。
  • 它已经被unset()

"NULL"NULL不同。

var_dump("null" == NULL);

输出:

bool(false)

2
但问题在于,这个空值是从Javascript发送的,就像 title=null 然后你做一个 $title=$_POST['title']; 这基本上会给出 $title="null"; 是吗? - Aymane Shuichi
$variable = "null";,将 null 作为字符串。 - Martijn
@AymaneShuichi:请看答案。"NULL"不等同于NULL - Amal Murali
@Downvoter:你能提出任何改进建议/解释为什么要点踩吗? - Amal Murali
它不会评估为NULL类型,但更像是包含“null”字符串的字符串,但在这种情况下,参数很可能已被解析,但没有值。 - mewm
@AymaneShuichi:标题值通过ajax来自javascript,如果javascript的值未定义,那么php会将其解释为字符串吗? -- 是的。它不会被解释为NULL - Amal Murali

2
标题在发送到服务器之前会被转换为字符串。将JS值null转换为字符串会得到一个字符串“null”。因此,PHP只能将变量解释为字符串。但是,我怀疑您不会从空输入框中收到null值,而是会得到一个空字符串。

$(#title).val(); 只有当元素不存在时,才可能不会评估为'null'。 - mewm

1
在您的情况下,如果您将$(#title).val();作为数据发送到php脚本的ajax请求中,并且输入为空,则它将只是一个空字符串。

如果在Javascript中返回undefined会怎样? $title会得到字符串“undefined”吗? - Aymane Shuichi

0

PHP将JS的null拦截为"null" ->字符串,因此为了处理表单请求,我在我的PHP代码中进行了一些小的变通,如下所示:

function checknull($arg){
    if($arg == "null"){
      return;
    }else{
        return $arg;
    }
}
$a=array();
$b = "null";
$a['hi'] = checknull($b);
var_dump($a);

这将输出为

array(1) { ["hi"]=> NULL }

//同样,您可以对$_REQUEST进行测试

$var1 = checknull($_POST['title']);
var_dump($var1);

或者你可以使用

$var1 = $_POST['title'] === 'null'? NULL : $_POST['title'];
var_dump($var1);

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