我一直在写我的“如果这个变量不是空的”这样的陈述:
if ($var != '') {
// Yup
}
但我问过这是否正确,这对我没有造成问题。以下是我在网上找到的答案:
if (!($error == NULL)) {
/// Yup
}
这实际上看起来比我的方法更长,但它更好吗?如果是这样,为什么?
答案 0 :(得分:29)
而不是:
if (!($error == NULL))
简单地说:
if ($error)
人们会认为第一个更清楚,但实际上更具误导性。原因如下:
$error = null;
if (!($error == NULL)) {
echo 'not null';
}
这可以按预期工作。但是,接下来的五个值将具有相同的(以及许多意外的)行为:
$error = 0;
$error = array();
$error = false;
$error = '';
$error = 0.0;
第二个条件if ($error)
更清楚地表明涉及类型转换。
如果程序员想要求该值实际为NULL
,他应该使用严格的比较,即if ($error !== NULL)
答案 1 :(得分:1)
确切地知道变量中的内容是很好的,特别是如果您要检查未初始化的vs null或na vs true或false vs empty或0。
因此,如webbiedave所述,如果检查为null,请使用
$error !== null
$error === null
is_null($error)
如果检查是否已确定,则表示
isset($var)
如果检查true或false,或0或空字符串
$var === true
$var === 0
$var === ""
我只使用空的's和null,因为字符串函数往往不一致。如果检查为空
empty($var)
$var // in a boolean context
// This does the same as above, but is less clear because you are
// casting to false, which has the same values has empty, but perhaps
// may not one day. It is also easier to search for bugs where you
// meant to use ===
$var == false
如果语义上未初始化与上述值之一相同,则将开头的变量初始化为该值。
$var = ''
... //some code
if ($var === '') blah blah.
答案 2 :(得分:0)
为什么不这样做
if (!$var)
答案 3 :(得分:0)
有办法:
<?php
error_reporting(E_ALL);
$foo = NULL;
var_dump(is_null($inexistent), is_null($foo));
?>
另:
<?php
$var = '';
// This will evaluate to TRUE so the text will be printed.
if (isset($var)) {
echo "This var is set so I will print.";
}
?>
检查它是否为空:
<?php
$var = 0;
// Evaluates to true because $var is empty
if (empty($var)) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if (isset($var)) {
echo '$var is set even though it is empty';
}
?>