2013-04-06 80 views
1

我有以下代码:开关[“HTTP_HOST”]总是默认为第一

<?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; 
} 
?> 

它在本地服务器上运行(地球neighbours.local),所以应该输出“本地”。相反,它输出“活”。然而,在顶部的回声(echo $ _SERVER ['HTTP_HOST'];)返回的是earth-neighbours.local,所以它应该是回显的'local'。这让我难住。我之前已经开始工作了,现在我已经将它转移到页面的顶部,它不起作用。奇怪的!任何人?

回答

0

用途:代替

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

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

至于是对于switch statement

+2

实际上,case X || Y:'*是正确的语法*,但它的语义不是人们可能期望的... – 2013-04-06 20:33:20

+0

@ alex-shesterov:+1的澄清 – 2013-04-06 20:44:06

+0

得到了!谢谢! – Millo 2013-08-13 12:07:50

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。在案件结束时不会中断告诉它继续。