[英]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
東西當轉換為布爾值時 (例如,undefined, 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
(在轉換為布爾值(如if
/ else
表達式時,其評估為false
)),則無需膨脹代碼進行不必要的測試不會增加任何價值。
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
}
盡管這樣會創建一些一次性變量,但這樣的選擇可能是一個不錯的選擇。
/*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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.