有基本的php if / else语句有问题

时间:2015-05-13 03:37:00

标签: php if-statement

如果'test1'在url:

中,则此方法有效
<? if(strpos($_SERVER['HTTP_HOST'], 'test1') !== FALSE) : ?>
  <p>Do something</p>
<? else : ?>
  <p>Do something else</p>
<? endif ?>

如果'test1'在url:

中,则无效
<? if(strpos($_SERVER['HTTP_HOST'], 'test1') OR strpos($_SERVER['HTTP_HOST'], 'test2') !== FALSE) : ?>
  <p>Do something</p>
<? else : ?>
  <p>Do something else</p>
<? endif ?>

的问题:

1。 当我尝试运行第二个选项时,php每次输出“Do something else” - 我知道它是基本的,但为什么会这样?

2。 为什么== TRUE在此实例中不起作用,只有!==FALSE有效。

任何帮助都会非常感激 - 我花了很多时间来研究这个,很抱歉,如果这是因为一个愚蠢的错误。

干杯

2 个答案:

答案 0 :(得分:2)

您不应该使用== TRUE进行松散测试,因为您可能会出现误报,请记住0在测试松散且0strpos为假时是假的。是有效的,因为它实际上是针存在于相对于字符串开头的位置。

请考虑以下代码段:

<?php $_SERVER['HTTP_HOST'] = 'test1.com'; ?>
<?php if(strpos($_SERVER['HTTP_HOST'], 'test1') == TRUE): ?>
  <p>Do something</p>
<?php else : ?>
  <p>Do something else</p>
<?php endif; ?>

这是误报的一个例子。

test1确实位于字符串中(位置0),但由于它返回0并且您使用== TRUE进行测试,它将进入else阻止,留下错误的答案。

因此,您应该始终对其进行测试!== false

<?php $_SERVER['HTTP_HOST'] = 'test1.com'; ?>
<?php if(
    (strpos($_SERVER['HTTP_HOST'], 'test1') !== false) OR
    (strpos($_SERVER['HTTP_HOST'], 'test2') !== FALSE)) : ?>
  <p>Do something</p>
<?php else : ?>
  <p>Do something else</p>
<?php endif; ?>

实际上它在manual覆盖。阅读红色框注意事项。

答案 1 :(得分:0)

试试这个

if(strpos($_SERVER['REQUEST_URI'], 'test1') OR strpos($_SERVER['REQUEST_URI'], 'test2') !== FALSE){ 
  echo"<p>Do something</p>";
} else {
  <p>Do something else</p>
}