我正在尝试将这个简单的else语句转换为更容易阅读的开关;
$parts_arr = explode('.', $_SERVER['SERVER_NAME']);
if (in_array('dev', $parts_arr)) {
DEFINE('APP_ENV', "dev");
} else if (in_array('staging', $parts_arr)) {
DEFINE('APP_ENV', "staging");
} else if (in_array('local', $parts_arr)) {
DEFINE('APP_ENV', "local");
} else {
DEFINE('APP_ENV', "live");
}
但是我已经完全画了一个空白。我不能使用foreach循环并使用字符串,因为APP_ENV
无法重新定义。
答案 0 :(得分:1)
您只能检查整个服务器名称。
switch($_SERVER['SERVER_NAME']) {
case 'mysite.com':
case 'www.mysite.com':
DEFINE('APP_ENV', "live");
break;
case 'dev.mysite.com':
DEFINE('APP_ENV', "dev");
break;
case 'staging.mysite.com':
DEFINE('APP_ENV', "staging");
break;
case 'mylocalhost.local':
DEFINE('APP_ENV', "local");
break;
default:
exit;
}
答案 1 :(得分:0)
除非您正在进行字符串比较,否则您无法将其转换为开关案例结构。
也许是这样的:
$str = array_pop(explode('.', $_SERVER['SERVER_NAME']));
switch($str)
{
case 'dev' :
DEFINE('APP_ENV', "dev");
break;
// en so on
}
Sunil Pachlangia的解决方案不起作用,因为他正在比较一个数组和一个字符串
答案 2 :(得分:0)
<?php
$parts_arr = explode('.', $_SERVER['SERVER_NAME']);
switch (true) {
case in_array('dev', $parts_arr):
DEFINE('APP_ENV', "dev");
break;
case in_array('staging', $parts_arr):
DEFINE('APP_ENV', "staging");
break;
case in_array('local', $parts_arr):
DEFINE('APP_ENV', "local");
break;
default:
DEFINE('APP_ENV', "live");
break;
}
答案 3 :(得分:0)
我认为我倾向于回避拆分字符串和分析数组元素,因为@ Almo-Do评论在某种配置文件中是特定的。
$environments = array(
'localhost' = > 'local'
, 'staging.mysite.com' > 'staging'
// etc - see? now you can comment some out
//, 'mysite.com' => 'live'
);
然后简单地
define ('APP_ENV', $environments[$_SERVER['SERVER_NAME']]);
或者甚至在此之前更加防守,例如:
if (!array_key_exists($environments[$_SERVER['SERVER_NAME'])) die('suitable msg');