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。也许你只是有一个拼写错误——如果你禁用了通知,你永远不会发现。