2013-04-06 40 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。在案件結束時不會中斷告訴它繼續。