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

PHP E_NOTICE best practice - Is it bad to check an undefined var for a value?

启用 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 消息吗?检查可能不存在的变量的值有什么不好吗?

empty 在这种情况下很有用。如下图:

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

详细了解 empty

或者如果变量是一个字符串你也可以这样使用:

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

避免生成通知总是比设置 error_reporting() 忽略它们更好。也就是说,在这种情况下,确保在开始时设置变量几乎总是比检查它们是否在您引用它们的每个地方都设置更容易。即,如果您执行以下操作,则 var 永远不会设置为 false 条件:

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,它实际上是有意义的。