【问题标题】:switch using $_SERVER['HTTP_HOST'] always defaults to first使用 $_SERVER['HTTP_HOST'] 切换总是默认为 first
【发布时间】:2013-04-06 20:21:43
【问题描述】:

我有以下代码:

<?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,因此它应该是回显的“本地”。这让我很难过。我以前有它工作,现在我把它移到页面顶部,它不起作用。诡异的!有人吗?

【问题讨论】:

    标签: php switch-statement


    【解决方案1】:

    PHP 不像其他编程语言那样做 switch case 或语句。

    当你写下以下内容时:

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

    【讨论】:

      【解决方案2】:

      用途:

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

      代替:

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

      因为 switch statement 的语法不正确

      【讨论】:

      • 其实case X || Y: 是正确的语法,但它的语义不是人们所期望的......
      • @alex-shesterov: +1 澄清
      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2015-08-09
      • 2023-04-04
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2018-12-04
      相关资源
      最近更新 更多