1

I have the following code:

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

It's running on the local server (earth-neighbours.local) so should output 'local'. Instead it outputs 'live'. The echo at the top however (echo $_SERVER['HTTP_HOST'];) returns the url earth-neighbours.local so it should be 'local' that is echoed. This has me stumped. I had it working before and now I've shifted it to the top of the page and it doesn't work. Weird! Anyone?

4

2 に答える 2

3

PHP は、他のプログラミング言語のように大文字と小文字の切り替えやステートメントを行いません。

次のように書くと:

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

これが実際に起こることです:

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

これが発生する理由は、ケースの内容が実際に評価されるためで、PHP では1 || 2 === true. 次に、PHP は $test をブール値に型キャストし、$test が空でなければ true になります。

PHP の「正しい」構文は次のとおりです。

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

PHP (および実際には他のいくつかの言語) では、インタープリターが に入るとswitch、それが出てくる唯一の方法はbreak. ケースの最後に壊れていないということは、続行することを示しています。

于 2013-04-06T20:26:27.103 に答える
0

使用する:

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

それ以外の:

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

これは、 switch ステートメントの構文が正しくないためです。

于 2013-04-06T20:23:53.737 に答える