Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP E_注意最佳实践-检查未定义的var值是否不好?_Php_Error Handling_E Notices - Fatal编程技术网

PHP E_注意最佳实践-检查未定义的var值是否不好?

PHP E_注意最佳实践-检查未定义的var值是否不好?,php,error-handling,e-notices,Php,Error Handling,E Notices,启用了E_NOTICE错误消息后,PHP不喜欢以下代码,除非已经定义了变量$mdDialog和$mdToast: if ($mdDialog || $mdToast) { $ngMaterial = true; } 为了避免E_通知错误,我必须写: if (isset($mdDialog) || isset($mdToast)) { $ngMaterial = true; } 问题是,对于上面的代码,如果我有一个$mdDialog=false行在前面的某个地方,语句将是真实的

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

if ($mdDialog || $mdToast) {
    $ngMaterial = true;
}
为了避免
E_通知
错误,我必须写:

if (isset($mdDialog) || isset($mdToast)) {
    $ngMaterial = true;
}
问题是,对于上面的代码,如果我有一个
$mdDialog=false行在前面的某个地方,语句将是真实的,这不是我们的想法。为了避免这种情况,我必须写:

if ((isset($mdDialog) && $mdDialog) || (isset($mdToast) && $mdToast)) {
    $ngMaterial = true;
}
这是如此之长,感觉过度,只是为了避免E_通知信息


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

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

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

阅读更多信息。

空的
在这种情况下很有用。如下图所示:

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

阅读有关的详细信息。

或者,如果变量是字符串,也可以使用以下内容:

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

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

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

避免生成通知总比设置
错误报告()
忽略通知要好。这就是说,在这样的情况下,确保VAR在开始时设置几乎总是比检查VAR是否在您引用它们的每个地方都设置容易。也就是说,如果您这样做,var永远不会被设置为假条件:

if (some condition) {
    $flag = true;
}
if (some condition) {
    $flag = true;
} else {
    $flag = 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);
或者这个:

$flag = false;
if (some condition) {
    $flag = true;
}
$flag = (some condition) ? true : false;
$flag = (bool) (some condition);
或者这个:

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

现在你不需要
isset()
empty()
,当你收到
E\u通知时,它实际上是有意义的。

避免生成通知总比设置
错误报告()
忽略它们要好。这就是说,在这样的情况下,确保VAR在开始时设置几乎总是比检查VAR是否在您引用它们的每个地方都设置容易。也就是说,如果您这样做,var永远不会被设置为假条件:

if (some condition) {
    $flag = true;
}
if (some condition) {
    $flag = true;
} else {
    $flag = 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);
或者这个:

$flag = false;
if (some condition) {
    $flag = true;
}
$flag = (some condition) ? true : false;
$flag = (bool) (some condition);
或者这个:

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

现在,您不需要
isset()
empty()
,当您收到
E_通知时,它实际上是有意义的。

您可以使用三元组进行分配<代码>isset
也可以接受多个变量。。甚至可以使用
!如果要查看它是否有值,则为空。您可以使用三元值进行赋值<代码>isset
也可以接受多个变量。。甚至可以使用
!如果要查看它是否有值,则为空。未定义时将抛出一个通知。如果变量未定义,则不会执行此代码块。如果变量未定义,则不会执行此代码块。如果变量未定义,则不会执行此代码块True,其效果非常好,并且比
isset()
,尽管问题仍然存在-使用
empty()
函数删除任何通知的最佳实践是,还是直接检查var是否真实,隐藏未定义时抛出的任何通知,代码会更快?
empty
还会检查isset和空值,如blank string
'
NULL
false
等。因此将不会出现未定义的警告。请注意,手册中的
以下值被认为是空的
部分。如果这些值中有任何一个有效,则需要使用
|
和有效值检查;或者返回到
isset
。最好的做法是编写不生成通知的代码,无论是否隐藏。@MarcusEdensky通知并不坏,这就是重点——但如果你盲目忽略它们,那么你将永远看不到真正有意义的通知。例如,如果您编写的代码不生成通知,然后收到关于未定义变量的通知,那么您可以非常确定您有一个bug。也许你只是有一个拼写错误——如果你禁用了通知,你就永远不会发现它。没错,它工作得很好,比
isset()
更干净,尽管问题仍然存在——使用
empty()
函数删除任何通知是最好的做法,或者直接检查var是否真实,代码会更快吗,隐藏未定义时抛出的任何通知?
empty
还会检查isset以及空值,如blank string
'
NULL
false
等。因此不会出现未定义的警告。不过请注意,手册中的
部分认为以下值为空。如果这些值中有任何一个有效,则需要使用
|
和有效值检查;或者返回到
isset
。最好的做法是编写不生成通知的代码,无论是否隐藏。@MarcusEdensky通知并不坏,这就是重点——但如果你盲目忽略它们,那么你将永远看不到真正有意义的通知。例如,如果您编写的代码不生成通知,然后收到关于未定义变量的通知,那么您可以非常确定您有一个bug。也许你只是有一个拼写错误——如果你禁用了通知,你永远不会发现。