我有以下代码:
<?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'。这让我很难过。我以前工作过,现在我把它转移到了页面的顶部,它不起作用。奇怪的!任何人吗?
答案 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
的错误语法