I am trying to convert this simple set of else statement into a more easily readable switch;
$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");
}
However I have completely drawn a blank. I can't use a foreach loop and use the string as the case as APP_ENV
cannot be redefined.
You can't turn it into switch-case structure unless you're doing string comparaison.
Maybe something like this :
$str = array_pop(explode('.', $_SERVER['SERVER_NAME']));
switch($str)
{
case 'dev' :
DEFINE('APP_ENV', "dev");
break;
// en so on
}
Sunil Pachlangia's solution won't work because he is comparing an array and a string
You may only check the whole server name.
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;
}
<?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;
}
I think I'd tend to shy away from splitting strings and analysing array elements, as @Almo-Do commented Be specific in some kind of config file.
$environments = array(
'localhost' = > 'local'
, 'staging.mysite.com' > 'staging'
// etc - see? now you can comment some out
//, 'mysite.com' => 'live'
);
Then simply
define ('APP_ENV', $environments[$_SERVER['SERVER_NAME']]);
Or even be a bit more defensive prior to that, something like :
if (!array_key_exists($environments[$_SERVER['SERVER_NAME'])) die('suitable msg');