我有这个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
,让它们计算为true
或false
。 例如:
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
}