2010-04-01 75 views
0

我已經創建了這個代碼分支,以便如果永久鏈接設置不至少與其中一個OR條件匹配,我可以執行「做某事」分支。但是,我相信邏輯中存在一個缺陷,因爲我已經爲/%postname%.html設置了永久鏈接,並且它仍然嘗試echo的真實性;這種條件下的邏輯缺陷是什麼?

我相信我需要將ORs更改爲AND,對嗎?

if (get_option('permalink_structure') !== "/%postname%/" || 
      get_option('my_permalinks') !== "/%postname%/" || 
    get_option('permalink_structure') !== "/%postname%.html" || 
      get_option('my_permalinks') !== "/%postname%.html")) 
{ 
//do something 
    echo "true"; 
} 
+1

在一行中超過200個字符? – 2010-04-01 18:24:55

回答

4

您正在測試:

if(get_option('permalink_structure') !== "/%postname%/" 

而且您的永久鏈接是/%postname%.html - 這意味着它不是"/%postname%/"

因此,該條件的第一部分是true,而你進入if塊 - 其他人甚至沒有評估。


我想你想要的是使用&&,而不是||

if(get_option('permalink_structure') !== "/%postname%/" 
    && get_option('my_permalinks') !=="/%postname%/" 
    && get_option('permalink_structure') !== "/%postname%.html" 
    && get_option('my_permalinks') !=="/%postname%.html")) 
{ 
//do something 
    echo "true"; 
} 

這將意味着:

  • 如果永久不"/%postname%/"
  • 和永久不"/%postname%/"
  • 和固定鏈接不是"/%postname%.html"
  • 和永久不"/%postname%.html"
  • 然後,回聲真正
0

是的,將它們切換到AND它應該工作。您可以將其轉換爲==,並將!放在前面。

4

當你做這樣的結構:

if($a != 1 || $a != 2) 

那麼它將永遠是正確的,因爲這是錯誤的$ a應同時爲1和2。

你的構造有類似的缺陷。

0

使用ands,而不是ors。我自己犯了同樣的錯誤。

0
if !(get_option('permalink_structure') == "/%postname%/" || 
      get_option('my_permalinks') == "/%postname%/" || 
    get_option('permalink_structure') == "/%postname%.html" || 
      get_option('my_permalinks') == "/%postname%.html")) 
{ 
    echo "true"; 
} 
+0

這是有效的語法? – 2010-04-01 18:36:12

0

至於說其他,使用AND&&),而不是OR||)。如果您不熟悉Boolean logic,這裏簡稱:

TRUE and FALSE == FALSE 
TRUE and TRUE == TRUE 

FALSE or FALSE == FALSE 
TRUE or FALSE == TRUE