如果有条件,有没有更好的方法来做到这一点


Is there a better way to do this if condition

我有这个if语句

 if (!(@$donnees['mode']['delete'] === true || @$donnees['mode']['display'] === true)){
     //doSomething only if mode is not delete nor display 
 }

我曾经@在未设置模式时不会收到通知。因为如果我使用 isset 代替,它会更丑陋:

$cond_delete = isset($donnees['mode']['delete']) && $donnees['mode']['delete'] === true;
$cond_display = isset($donnees['mode']['display ']) && $donnees['mode']['display '] === true;
if (!($cond_delete || $cond_display)){
   //doSomething only if mode is not delete nor display 
}

有没有更简洁的方法可以做到这一点?

谢谢

如果$donnees[ 'mode' ][ 'delete' ]/$donnees[ 'mode' ][ 'display' ]永远只是A(设置为true,或者B(设置为false或转换为布尔值时被视为false的东西 - 例如未定义,NULL,0,"0",空字符串 - 那么您可以省略=== true,让它们计算为truefalse。 例如:

if ( ! (
  @$donnees[ 'mode' ][ 'delete' ] ||
  @$donnees[ 'mode' ][ 'display' ]
) ) {
   // doSomething only if mode is not delete nor display 
}
// if

$donnees[ 'mode' ]可能包含哪些其他元素?

除非您刚刚学习编程并且还不知道自己在做什么,否则通知(E_NOTICE(只是一件麻烦事,如果可能的话,我会禁用它们。 禁用通知后,如果您想知道数组元素是否真的存在,那么您可以使用 array_key_exists()isset() ,具体取决于您要查找的内容。 如果您只想访问变量/数组元素并让它评估为NULL它是否未定义(转换为布尔值时将评估为 false,如在 if/else 表达式中(,那么您不需要使用不增加任何价值的不必要的测试来膨胀您的代码。

这样的东西可能是一个不错的选择,尽管它创建了几个一次性变量。

/*Either set values if setting available, or set false*/
$cond_delete = isset($donnees['mode']['delete'])? $donnees['mode']['delete']: false;
$cond_display = isset($donnees['mode']['display '])? $donnees['mode']['display ']: false;

/*Where either mode is set do something*/
if (!($cond_delete || $cond_display)){
 //doSomething only if mode is not delete nor display 
}
if (isset($donnees['mode']['delete'], $donnees['mode']['display']) AND ($donnees['mode']['delete'] === true || $donnees['mode']['display'] === true)){
  //doSomething only if mode is not delete nor display
}
相关文章: