簡體   English   中英

如果有條件,是否有更好的方法來做到這一點

[英]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而讓它們求值為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 (在轉換為布爾值(如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM