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

时间:2012-01-25 11:06:24

标签: php

我有这个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 
}

有更简洁的方法吗?

谢谢

3 个答案:

答案 0 :(得分:1)

如果$donnees[ 'mode' ][ 'delete' ] / $donnees[ 'mode' ][ 'display' ]只有A)设置为true,或者B)设置为false或者被视为false的内容} when converting to boolean - 例如undefined,NULL,0,“0”,空字符串 - 然后您可以省略=== true并让它们评估为truefalse。 E.g:

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 / {{ 1}}表达式),那么你不需要使用不添加任何值的不必要的测试来膨胀你的代码。

答案 1 :(得分:0)

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
}

答案 2 :(得分:0)

这样的事情可能是一个不错的选择,尽管它会创建几个单一使用变量。

/*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 
}