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

PHP strange If Else loop output if i make exact opposite of current condition

我想做什么检查 $_GET['mode'] 特定页面类型, 如果模式是收藏夹、rss 或 my_uploads 页面,则不显示 RSS link 像这样

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

然后仅当 link 是这样创建时才向 RSS FEED 显示 link

<?=(isset($RSS_link)) ? '<a href="'.$RSS_link.'">RSS FEED</a>' : '' ;?>

以上代码工作正常,仅当页面不是收藏夹时显示 RSS FEED Link,rss,my_uploads

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

<?php

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

即只需将运算符更改为相反并将 if 移动到 else,将 else 移动到 if,

<?=(isset($RSS_link)) ? '<a href="'.$RSS_link.'">RSS FEED</a>' : '' ;?>

然后尝试显示 RSS FEED Link,它显示 link,无论设置什么模式。

为什么会这样? 我该如何解决这个问题?

你需要改变你的条件

$mode != 'favorites' || $mode != 'rss' || $mode != 'my_uploads'

$mode != 'favorites' && $mode != 'rss' && $mode != 'my_uploads'

这是常见的用法变体De Morgan's laws

你总是可以用表格检查你的逻辑。

$mode = 'favorites';
$mode != 'favorites' || $mode != 'rss' || $mode != 'my_uploads'
//    ^ false                 ^ true            ^ true
//                   ^ true
//                                     ^ true

结果为真。

$mode = 'favorites';
$mode != 'favorites' && $mode != 'rss' && $mode != 'my_uploads'
//    ^ false                 ^ true            ^ true
//                   ^ false
//                                     ^ false

结果为假。