if语句在使用is_null()时对NULL变量求值为true

时间:2018-05-18 17:19:29

标签: php

所以我有一个带有模态的表单,该模态有3行,每行有2个文本字段,如果用户(我在这个prod的情况下)只填充2行,并将另一行留空,第三个值应为NULL。

在我的剧本中我得到了:

if (!is_null($_POST['packageDependencies']['bundle'][2])) {
$packageDependency3 = $_POST['packageDependencies']['bundle'][2] . "|" . $_POST['packageDependencies']['version'][2] . "|" . $_POST['packageDependencies']['repository'][2];
$depends = "<key>dependencies</key>
            <array>
                <string>$packageDependency1</string>
                <string>$packageDependency2</string>
                <string>$packageDependency3</string>
            </array>
            ";

}

所以我正在检查if (!is_null($3rdRow)) { //Do this },但变量$_POST['packageDependencies']['bundle'][2]实际上是NULL,因为我使用var_dump($_POST['packageDependencies']['bundle'][2]);并且我将NULL打印到页面,但if语句仍在处理,就像不是 NULL一样。

$depends获取fwrite()到XML文件,当我打开它时,我只看到||,但由于变量为NULL,因此我不应该在那里没有在这些输入字段中输入任何值。

2 个答案:

答案 0 :(得分:1)

根据我的建议,更完整的解决方案是:

if (!empty(trim($_POST['packageDependencies']['bundle'][2]))) {

NULL是变量的特定状态,涉及PHP将变量名称与变量位置相关联的方式。您可以将其视为标志,表示存在变量名称,但没有与之关联的存储位置。有许多情况是空的,修剪将捕获,将绕过检查空。

答案 1 :(得分:0)

即使!empty()成功了,我也决定使用==来减少歧义。找到的答案here非常直观。

编辑:根据@gview,添加(!empty(trim($var)))是最好的选择,就好像用户在标签后意外按空格键一样,这样可以避免任何错误。