PHP奇怪如果我与当前条件完全相反,那么Else循环输出

AMB*_*AMB 0 php conditional if-statement

我想要做的是检查$_GET['mode']特定页面类型,如果模式是收藏夹,rss或my_uploads页面然后不显示这样的RSS链接

<?php
$mode = $_GET['mode'];
if($mode == 'favorites' || $mode == 'rss' || $mode == 'my_uploads'){
$RSS_link = null;
}else{
$RSS_link = create rss link logic here ;
}
Run Code Online (Sandbox Code Playgroud)

然后,如果链接是这样创建的,则稍后显示指向RSS FEED的链接

<?=(isset($RSS_link)) ? '<a href="'.$RSS_link.'">RSS FEED</a>' : '' ;?>
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,只有在页面不是收藏夹,rss,my_uploads时才会显示RSS FEED链接

但是如果像这样改变RSS创建条件.

<?php

    if($mode != 'favorites' || $mode != 'rss' || $mode != 'my_uploads'){
    $RSS_link = create rss link logic here ;
    }else{
    $RSS_link = null;
    }
Run Code Online (Sandbox Code Playgroud)

即只是将操作符更改为相反并移动if if else to else to if if,

<?=(isset($RSS_link)) ? '<a href="'.$RSS_link.'">RSS FEED</a>' : '' ;?>
Run Code Online (Sandbox Code Playgroud)

然后尝试显示RSS FEED Link,它显示链接,无论模式设置如何.

为什么会这样?我怎样才能解决这个问题 ?

sec*_*tus 5

你需要改变自己的状况

$mode != 'favorites' || $mode != 'rss' || $mode != 'my_uploads'
Run Code Online (Sandbox Code Playgroud)

$mode != 'favorites' && $mode != 'rss' && $mode != 'my_uploads'
Run Code Online (Sandbox Code Playgroud)

这是使用De Morgan定律的常见变体

你总是可以用表来检查你的逻辑.

$mode = 'favorites';
$mode != 'favorites' || $mode != 'rss' || $mode != 'my_uploads'
//    ^ false                 ^ true            ^ true
//                   ^ true
//                                     ^ true
Run Code Online (Sandbox Code Playgroud)

结果是真的.

$mode = 'favorites';
$mode != 'favorites' && $mode != 'rss' && $mode != 'my_uploads'
//    ^ false                 ^ true            ^ true
//                   ^ false
//                                     ^ false
Run Code Online (Sandbox Code Playgroud)

结果错误.