2015-04-27 50 views
3

我想這組簡單的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

+2

你是第一個,如果和ELSEIF完全是沒有意義的! – Rizier123

+1

你不能真正把它變成一個switch語句,至少不是以任何干淨的方式。無論如何它都很可讀。 –

+0

好的,如果我把'SERVER_NAME'作爲'staging.local.dev'會怎麼樣? –

回答

0

除非你做串comparaison你不能把它變成的switch-case結構。

也許是這樣的:因爲他比較數組和字符串

1

您只可以檢查整個服務器名稱

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

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

蘇尼爾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; 
} 
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; 
} 
0

我想我會傾向於從分割字符串和分析數組元素迴避,如@阿爾莫待辦事項評論要具體某種配置文件中。

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