我有这个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
}
有更简洁的方法吗?
谢谢
答案 0 :(得分:1)
如果$donnees[ 'mode' ][ 'delete' ]
/ $donnees[ 'mode' ][ 'display' ]
只有A)设置为true
,或者B)设置为false
或者被视为false
的内容} when converting to boolean - 例如undefined,NULL
,0,“0”,空字符串 - 然后您可以省略=== true
并让它们评估为true
或false
。 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
}