Bu koşullu mantık kusur nedir?

5 Cevap

Bu kodu şube oluşturduk böylece kalıcı ayarlar, hiçbir maç OR koşulları, ben "bir şey yapmak" şube yürütebilirsiniz en az birini yapmak durumunda. . Ben /% postname% html kalıcı bağlantı kurdum ve hala echo gerçek çalışır Ancak, ben, mantık bir kusur olduğuna inanıyoruz;

Ben AND OR'lar değiştirmek gerekir inanıyoruz, değil mi?

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";
}

5 Cevap

Sen test:

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

Ve permalink /%postname%.html - o değil yani "/%postname%/"

Yani, durumun o ilk bölümü true, ve if bloğunun içine giriyoruz - ve diğer olanlar bile değerlendirilmez.


I suppose what you want is to use &&, and not || :

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";
}

Anlamına gelecektir ki:

  • kalıcı değilse "/%postname%/"
  • ve permalink değil "/%postname%/"
  • ve permalink değil "/%postname%.html"
  • ve permalink değil "/%postname%.html"
  • Daha sonra, gerçek yankı

Eğer böyle bir yapı yapmak zaman:

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

o zaman bu sahte $ bir anda 1 ve 2 olmalıdır olmak için yana doğru olacaktır.

Lütfen yapı benzer kusurludur.

Evet, AND onları geçmek ve çalışması gerekir. Yerine == için bu ters ve önünde bir ! koyabilirsiniz.

Eleştiri değil, ors kullanın. Kendimi aynı hatayı yaptık.

Diğer demek, AND (&&) yerine kullanımı OR (||). Eğer Boolean logic aşina iseniz, burada kısa:

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

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