Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将ELSE转换为具有布尔返回值的开关_Php_Switch Statement - Fatal编程技术网

Php 将ELSE转换为具有布尔返回值的开关

Php 将ELSE转换为具有布尔返回值的开关,php,switch-statement,Php,Switch Statement,我试图将这组简单的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('lo

我试图将这组简单的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

除非进行字符串比较,否则无法将其转换为开关大小写结构

也许是这样的:

$str = array_pop(explode('.', $_SERVER['SERVER_NAME']));

switch($str)
{
   case 'dev' :
      DEFINE('APP_ENV', "dev");
   break;
   // en so on
}

Sunil Pachlangia的解决方案不起作用,因为他正在比较数组和字符串

您只能检查整个服务器名称

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

我想我倾向于避免拆分字符串和分析数组元素,因为@Almo在某种配置文件中是特定的

$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');

如果你和其他人完全没有意义,你是第一个!你不能真的把它转换成switch语句,至少不能以任何干净的方式。不管怎么说,它还是很可读的。好吧,如果我把
SERVER\u NAME
作为
staging.local.dev
?@AlmaDo怎么办?那么我想这个问题是你遇到的最小问题了
if (!array_key_exists($environments[$_SERVER['SERVER_NAME'])) die('suitable msg');