PHP E_NOTICE最佳实践-检查未定义的var是否有值是否不好?

时间:2018-07-18 17:23:01

标签: php error-handling e-notices

启用E_NOTICE错误消息后,PHP不喜欢以下代码,除非已经定义了变量$mdDialog$mdToast

if ($mdDialog || $mdToast) {
    $ngMaterial = true;
}

为避免出现E_NOTICE错误,我必须写:

if (isset($mdDialog) || isset($mdToast)) {
    $ngMaterial = true;
}

问题在于,使用上述代码,如果我在前面的某个地方有$mdDialog = false;行,该语句将是真实的,这不是主意。为了避免这种情况,我必须写:

if ((isset($mdDialog) && $mdDialog) || (isset($mdToast) && $mdToast)) {
    $ngMaterial = true;
}

这太长了,而且感觉过度,只是为了避免出现E_NOTICE消息。

因此,问题是,我应该关心这些E_NOTICE消息吗?检查可能不存在的变量的值有什么不好的地方吗?

3 个答案:

答案 0 :(得分:4)

empty在这种情况下可能很有用。如下所示:

if (!empty($mdDialog) || !empty($mdToast)) {
    $ngMaterial = true;
}

详细了解empty

答案 1 :(得分:1)

或者,如果变量是一个字符串,您也可以使用它:

if(strlen($mdDialog) < 1 || strlen($mdToast) < 1){
     $ngMaterial = true;
 } 

答案 2 :(得分:0)

与设置error_reporting()忽略它们相比,最好避免生成通知。就是说,在这种情况下,要确保在开始时设置了变量,通常要比检查它们是否在您引用的每个位置都设置要容易得多。也就是说,如果您执行以下操作,则永远不会将var设置为错误条件:

if (some condition) {
    $flag = true;
}

相反,请执行以下操作:

if (some condition) {
    $flag = true;
} else {
    $flag = false;
}

或者这个:

$flag = false;
if (some condition) {
    $flag = true;
}

或者这个:

$flag = (some condition) ? true : false;

或者这个:

$flag = (bool) (some condition);

现在您不需要isset()empty(),当您获得E_NOTICE时,它实际上是有意义的。