有条件的逻辑缺陷是什么?

时间:2010-04-01 18:22:16

标签: php

我已经创建了这个代码分支,这样如果永久链接设置与OR条件中的至少一个不匹配,我就可以执行“do something”分支。但是,我认为逻辑上存在一个缺陷,因为我已经将永久链接设置为/% postnamename.html,它仍然会尝试echo的真实;

我相信我需要将OR更改为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";
}

6 个答案:

答案 0 :(得分: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"
  • 然后,echo true

答案 1 :(得分:4)

当你做这样的构造时:

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

然后它将永远是真的,因为这是假的,$ a应该同时为1和2。

你的构造同样存在缺陷。

答案 2 :(得分:0)

是的,将它们切换到AND,它应该可以正常工作。您可以改为将==转换为!并将{{1}}放在前面。

答案 3 :(得分:0)

使用ands,而不是ors。我自己犯了同样的错误。

答案 4 :(得分: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";
}

答案 5 :(得分:0)

正如另一个所说,使用AND&&)代替OR||)。如果您不熟悉Boolean logic,请简要说明:

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

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