使用$ _SERVER ['HTTP_HOST']切换始终默认为第一个

时间:2013-04-06 20:21:44

标签: php switch-statement

我有以下代码:

<?php
echo $_SERVER['HTTP_HOST'];
// CONFIGURATION ITEMS
$captcha_private_key = '';
$captcha_public_key = '';
switch ($_SERVER['HTTP_HOST']) {
    case 'earth-neighbours.com' || 'www.earth-neighbours.com':
        $captcha_private_key = '6Lcb_t4SAAAAALkdH4njSny2HYbrmGKS_G84kM_d';
        $captcha_public_key = '6Lcb_t4SAAAAAPEtqJEcWXuo0zmRD5PxYkXx84R4';
        echo 'live';
        break;
    case 'earth-neighbours.projects.mi24.net':
        $captcha_private_key = '6Lca_t4SAAAAAJb5L4sA7fEHxDFA0Jl8jFw-h3hE';
        $captcha_public_key = '6Lca_t4SAAAAAFd-Q2k8esFa9U8nQ2rirEZHFtAH';
        break;
    case 'earth-neighbours.local':
        $captcha_private_key = '6LcZ_t4SAAAAAGc1_S9ahxo-Vg-e7QgHg4yAWBVU';
        $captcha_public_key = '6LcZ_t4SAAAAAPHQDb_f-g4mS6mpmc0heustHQ60&hl';
        echo 'local';
        break;
}
?>

它在本地服务器上运行(earth-neighbours.local)所以应该输出'local'。相反,它输出“实时”。然而,顶部的回声(echo $ _SERVER ['HTTP_HOST'];)返回url earth-neighbours.local,因此它应该是回显的'local'。这让我很难过。我以前工作过,现在我把它转移到了页面的顶部,它不起作用。奇怪的!任何人吗?

2 个答案:

答案 0 :(得分:3)

PHP不像其他编程语言那样执行切换案例或语句。

撰写以下内容时:

 switch ($test) {
   case 1 || 2:
    $blah();
    break;
 }

这是实际发生的事情:

 switch ($test) {
   if (true == $test) {
   }
 }

发生这种情况的原因是因为案例内容实际上得到了评估,而在PHP中,1 || 2 === true。 PHP然后在$ test上对布尔值进行类型转换,而$ test除非为空,否则为真。

PHP“正确”语法是:

switch ($test) {
  case 1:
  case 2:
    $blah();
    break;

在PHP(实际上还有其他一些语言)中,一旦解释器进入switch,它出现的唯一方法就是break。在案件结束时没有破坏告诉它继续。

答案 1 :(得分:0)

使用:

case 'earth-neighbours.com':
case 'www.earth-neighbours.com':

而不是:

case 'earth-neighbours.com' || 'www.earth-neighbours.com':

因为这是switch statement

的错误语法