非null if语句的最佳实践

时间:2012-01-31 00:52:22

标签: php

我一直在写我的“如果这个变量不是空的”这样的陈述:

if ($var != '') {
// Yup
}

但我问过这是否正确,这对我没有造成问题。以下是我在网上找到的答案:

if (!($error == NULL)) {
/// Yup
}

这实际上看起来比我的方法更长,但它更好吗?如果是这样,为什么?

4 个答案:

答案 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';
}
?>