php:复合if语句(被忽略)

时间:2011-05-17 21:10:21

标签: php if-statement

如果子域不是“移动”并且文件名不是“设计”或“照片”,我想回应一些东西,所以echo if(不是“mobile”而不是“design”)或(不是“mobile”)而不是“照片”)。

我写的代码是:

<?php
    if ( ($subdomain != mobile) && ($currentFileName != design || $currentFileName != photo) ) {
        echo ('code')
    }
?>

但它不喜欢复合语句。如果我只是做($subdomain!=mobile)它有效;如果我只是做($currentFileName!=design)它有效;如果我只是做($currentFileName!=photo)它的确有效...... 上面的代码不会导致错误......它只是没有做任何事情。

有没有一种特殊的方法来复合/分组我刚才没有得到的陈述?我觉得这应该不难(而且我用PHP做了更复杂的事情,没有这么多麻烦......)。 我在此之后对我的陈述进行了建模:http://www.php.net/manual/en/control-structures.if.php#101724

谢谢!

编辑: 供参考:

$subdomain = implode(array_slice(array_reverse(explode('.', $baseURL)),2)); //resolves to "test"
$basename = basename($_SERVER['REQUEST_URI']); //resolves to "design.php"
$currentFileName = basename($basename, ".php"); //resolves to "design"

新问题是子域名“mobile”中的所有内容现在都被捕获,因此其中的任何页面都没有从echo获取“代码”(即使不是'design'或'photo')。

我尝试过的最新代码是:

if ( ($subdomain != 'test' && $currentFileName != 'design') && ($subdomain!='test' && $currentFileName != 'photo') ) {
    echo ('ajax code');
}

但仍然没有骰子:(

4 个答案:

答案 0 :(得分:5)

你的逻辑存在缺陷。您最有可能希望&&不是||。如果你仔细考虑一下这句话就会显而易见。让我们假设以下场景:$ currentFileName是'design'。它会通过,因为它不是'照片'。如果我们将$ currentFileName设为'photo',它仍然会通过,因为它不等于'design'。

编辑: 并且在比较字符串时请使用引号。 PHP将首先尝试使用该名称查找常量,然后假设它是一个字符串,因为它找不到。

答案 1 :(得分:1)

||替换为&& - 应该有'AND'

if ( ($subdomain != 'mobile') && ($currentFileName != 'design' && $currentFileName != 'photo') ) {
        echo ('code');
    }

答案 2 :(得分:0)

我理解应该是:

<?php
    if ($subdomain != 'mobile' && $currentFileName != 'design' && $currentFileName != 'photo') {
        echo ('code');
    }
?>

因为'或'使其匹配任何文件名,包括'design'和'photo'。

好点,引言补充说:)

答案 3 :(得分:0)

如果您要比较字符串,则应引用它们。否则,它认为它们是常数。

尝试:

<?php
if ( ($subdomain != 'mobile') && ($currentFileName != 'design' || $currentFileName != 'photo') ) {
  echo 'code';
}
?>

如果仍然无法正常工作,请调试$subdomain$currentFileName以确保它们符合您的想法。

注意:根据评论,您的逻辑似乎也是错误的。

相关问题